【问题标题】:AES256 Decryption with base64 decoding not working使用base64解码的AES256解密不起作用
【发布时间】:2012-06-13 05:27:20
【问题描述】:

我需要在我的 iphone 应用程序中执行 AES 256 解密。场景是纯文本在在线网页中使用 AES256 位(OFB 模式)进行 base64 编码和加密。 在我的应用程序中,我从该网页检索加密文本作为查询字符串。这里我做了base64解码和AES256解密。 但我得到 -4304 状态。

我用过kCCOptionPKCS7Padding。即使我也更改了填充,我也没有得到正确的解密纯文本。只显示不可读的文本。

我使用http://isv.appspot.com/app/enc 通过设置OFB 模式来检查使用base64 的AES256 加密。

以下代码有两种方法,我用于base64解码和AES256解密

+ (NSString*)decryptBase64String:(NSString*)encryptedBase64String keyString:(NSString*)keyString
{
    NSData* encryptedData = [NSData dataFromBase64String:encryptedBase64String];
    NSLog(@"encryptedData %@",encryptedData);
    // NSData *strData = [encryptedData subdataWithRange:NSMakeRange(0, [encryptedData length] - 2)];
    // NSString* newStr = nil;
    NSData* keyData = [keyString dataUsingEncoding:NSUTF8StringEncoding];
    NSData* data = [self decryptData:encryptedData
                                 key:keyData
                                  iv:nil];
   // newStr = [NSString stringWithCString:[strData bytes] encoding:NSUTF8StringEncoding];

    if (data) {

        return [[[NSString alloc] initWithData:data
                                      encoding:NSASCIIStringEncoding] autorelease];
    } else {
        return nil;
    }
}



+ (NSData*)decryptData:(NSData*)data key:(NSData*)key iv:(NSData*)iv;
{
    NSData* result = nil;

    // setup key
    unsigned char cKey[FBENCRYPT_KEY_SIZE];
    bzero(cKey, sizeof(cKey));
    [key getBytes:cKey length:FBENCRYPT_KEY_SIZE];

    // setup iv
    char cIv[FBENCRYPT_BLOCK_SIZE];
    bzero(cIv, FBENCRYPT_BLOCK_SIZE);
    if (iv) {
        [iv getBytes:cIv length:FBENCRYPT_BLOCK_SIZE];
    }

    // setup output buffer
    size_t bufferSize = [data length] + FBENCRYPT_BLOCK_SIZE;
    void *buffer = malloc(bufferSize);

    // do decrypt
    size_t decryptedSize = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          FBENCRYPT_ALGORITHM,
                                          kCCOptionPKCS7Padding,
                                          cKey,
                                          FBENCRYPT_KEY_SIZE,
                                          cIv,
                                          [data bytes],
                                          [data length],
                                          buffer,
                                          bufferSize,
                                          &decryptedSize);

    if (cryptStatus == kCCSuccess) {
        result = [NSData dataWithBytesNoCopy:buffer length:decryptedSize];
    } else {
        free(buffer);
        NSLog(@"[ERROR] failed to decrypt| CCCryptoStatus: %d", cryptStatus);
    }

return result;
}

谁能帮我用这个方法得到纯文本?

【问题讨论】:

  • 文档对导致 -4304 状态的原因有何说明?
  • 出于好奇,你说纯文本是用base64编码的。这并不一定意味着加密的 Ciphertext 是,但是您将 encryptedData 设置为 base64?

标签: iphone objective-c cryptography aes


【解决方案1】:

根据您问题中的事实,base64 编码的数据是加密的,而不是该数据的解码变体。因此,需要对base64编码的数据进行解密,然后再进行base64解码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2014-08-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多