我很难用NSData
解密NSData key
。虽然使用NSString
解密一切正常,但是以数据作为键,该方法返回null NSData
,尽管状态正常,并且该键的数据也正确。这是我的电话
NSData *decrypted = [AES AES128DecryptWithKey:data key:mute];
NSLog(@"DECRYPTED >> %@", decrypted);
我的方法
+ (NSData*)AES128DecryptWithKey:(NSData*) data key:(NSData*)key {
NSUInteger dataLength = [data length];
NSLog(@"trying to decrypt >> %@ with key >> %@", data, key );
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void* buffer = malloc(bufferSize);
size_t numBytesDecrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
[key bytes], kCCKeySizeAES128,
NULL /* initialization vector (optional) */,
[data bytes], dataLength, /* input */
buffer, bufferSize, /* output */
&numBytesDecrypted);
NSLog(@"cryptstatus %d", cryptStatus);
if (cryptStatus == kCCSuccess)
{
return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
}
free(buffer); //free the buffer;
return nil;
}
NSLog输出:
trying to decrypt >> <152f052e 79436003 7a9c1a59 3b82f1c4>
with key >> <1b510e76 ac0000a1 027af26a e25ad24a>
cryptstatus 0
DECRYPTED >> <>
看着RNEncryptor
,但它只有aes256,而我需要128.任何想法?
答案 0 :(得分:1)
单字节块可能只包含填充字节。在这种情况下,零字节将是预期的结果。
对于您的密文不是这种情况,在您的情况下,在加密期间没有应用填充,因此当您尝试取消填充数据时会出现故障。