每次尝试使用iOS SDK解密AES数据时,为什么会得到不同的结果?

时间:2013-12-26 06:52:38

标签: ios objective-c aes

我正在进行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;
}

1 个答案:

答案 0 :(得分:0)

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