【问题标题】:Why am I getting different results each time I try to decrypt AES data with the iOS SDK?为什么每次尝试使用 iOS SDK 解密 AES 数据时都会得到不同的结果?
【发布时间】:2013-12-26 06:52:37
【问题描述】:

我正在研究 AES 加密和解密。 我提供单个数据和单个密钥来解密,但每次都得到不同的输出。

我是这样使用的:

+(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,
                                      kCCOptionECBMode,
                                      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;
}

【问题讨论】:

  • 举一些例子,包括密钥、iv、加密数据和解密数据。另外为什么使用“FBENCRYPT_KEY_SIZE”而不是Apple定义?这也是与另一种语言(如 php)的互操作性问题吗?

标签: ios objective-c aes


【解决方案1】:

没有任何示例数据等的最佳猜测是键或 iv 的大小不正确和/或填充或模式不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-24
    • 1970-01-01
    • 2020-08-24
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    相关资源
    最近更新 更多