Ios AES128加密无法正确使用密钥和iv,并提供与android在相同加密后产生的不同输出
我使用下面的代码用AES128 CBC加密来加密NSData 由于没有键和IV的填充,其输出与 android,而android的输出是正确的Ios AES128加密无法正确使用密钥和iv,并提供与android在相同加密后产生的不同输出,ios,encryption,key,aes,Ios,Encryption,Key,Aes,我使用下面的代码用AES128 CBC加密来加密NSData 由于没有键和IV的填充,其输出与 android,而android的输出是正确的 您需要对密钥和IV进行Base64解码。我将密钥和IV作为字符串传递,但我仍需要对其进行解码,或者您打算说编码?首先,请使用联机工具进行检查。尝试解密消息并检查它是否与两种语言匹配。您可以在下面的行中使用Base64解码检查key和IV-[key getCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSU
您需要对密钥和IV进行Base64解码。我将密钥和IV作为字符串传递,但我仍需要对其进行解码,或者您打算说编码?首先,请使用联机工具进行检查。尝试解密消息并检查它是否与两种语言匹配。您可以在下面的行中使用Base64解码检查key和IV-[key getCString:keyPtr maxLength:sizeof(keyPtr)encoding:NSUTF8StringEncoding];你能把你要我添加的代码发给我吗?这会对我有更好的帮助,谢谢你的帮助。
- (NSData*)AES128Encrypt:(NSData *)dataToEncrypt iv:(NSString *)iv key:(NSString *)key {
char keyPtr[kCCKeySizeAES128 + 1];
bzero(keyPtr, sizeof(keyPtr));
[key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
char ivPtr[kCCBlockSizeAES128 + 1];
bzero(ivPtr, sizeof(ivPtr));
if (iv) {
[iv getCString:ivPtr maxLength:sizeof(ivPtr) encoding:NSUTF8StringEncoding];
}
NSUInteger dataLength = [dataToEncrypt length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
ccNoPadding,
keyPtr,
kCCBlockSizeAES128,
ivPtr,
[dataToEncrypt bytes],
dataLength,
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
}
free(buffer);
return nil;
}