Well im trying to encrypt an string in objective c extending NSData with this method:
@implementation NSData (AES128)
(NSData *)AES128Encrypt { //定义加密密钥 char keyPtr[kCCKeySizeAES128] = {'\xe1','\xaa','\x9c','\x61','\x46','\x74','\x44','\x56','\xf0','\xe5','\x47','\x46','\x86','\xdc','\x95','\x77'}; //获取待加密数据长度 NSUInteger dataLength = [self length]; //计算加密后数据的缓存区大小 size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); //加密操作 size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, NULL /* initialization vector (optional) */, [self bytes], dataLength, buffer, bufferSize, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { //将加密后的数据转化为NSData类型并返回,同时释放缓存区 return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted]; } free(buffer); //释放缓存区 return nil; }
(NSData *)AES128Decrypt { //定义解密密钥 char keyPtr[kCCKeySizeAES128] = {'\xe1','\xaa','\x9c','\x61','\x46','\x74','\x44','\x56','\xf0','\xe5','\x47','\x46','\x86','\xdc','\x95','\x77'}; //获取待解密数据长度 NSUInteger dataLength = [self length]; //计算解密后数据的缓存区大小 size_t bufferSize = dataLength + kCCBlockSizeAES128; void *buffer = malloc(bufferSize); //解密操作 size_t numBytesDecrypted = 0; CCCryptorStatus cryptStatus=CCCrypt(kCCDecrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding, keyPtr, kCCKeySizeAES128, NULL /* initialization vector (optional) */, [self bytes], dataLength, buffer, bufferSize, &numBytesDecrypted); if (cryptStatus == kCCSuccess) { //将解密后的数据转化为NSData类型并返回,同时释放缓存区 return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted]; } free(buffer); //释放缓存区 return nil; }
@end
then i call it here:
NSString *strData = @"My string";
NSData *objNSData = [NSData dataWithData:[strData dataUsingEncoding:NSUTF8StringEncoding]];
NSLog(@"加密后的数据: %@",[objNSData description]);
如果我只是在Objective-C中使用它,那么它可以正常工作。但是当我尝试将其发送到Java服务器时,它就无法工作了。
我的加密数据看起来像这样:
86fcf0fa9e3dff93dc8918ffd02ee203 12de0bf8c8ba300456293c4240296c0d
如果我尝试使用相同的密钥在Java中进行AES加密,我会得到这个结果:
86fcf0fa9e3dff93dc8918ffd02ee203 8388f173da143c6aeeb90e554259c83c
很奇怪,因为前半部分是一样的。
有人知道为什么会发生这种情况吗?谢谢。