【发布时间】:2014-11-30 23:18:24
【问题描述】:
我正在尝试在目标 C 中加密 AES256 中的 json 以发送到一台服务器并使用以下行 php 对其进行解密:
MCRYPT_DECRYPT (MCRYPT_RIJNDAEL_256, $ key, base64_decode ($ ha), MCRYPT_MODE_ECB, NULL));
花了几天时间搜索和测试,我还没有得到结果。我使用的代码是这样的:
- (NSString *)AES256EncryptData:(NSData *) datos {
//NSData * datos = [json dataUsingEncoding:NSUTF8StringEncoding];
UIApplication *aplicacion = [UIApplication sharedApplication];
AppDelegate *delegate = (AppDelegate *) aplicacion.delegate;
char keyPtr[kCCKeySizeAES256+1];
bzero(keyPtr, sizeof(keyPtr));
[delegate.appKey getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding ];
NSUInteger dataLength = [datos length];
size_t bufferSize = dataLength + kCCBlockSizeAES128;
void *buffer = malloc(bufferSize);
size_t numBytesEncrypted;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmAES128,
kCCOptionECBMode + kCCOptionPKCS7Padding,
keyPtr,
kCCKeySizeAES256,
NULL,
[datos bytes],
[datos length],
buffer,
bufferSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *returnData = [[NSData alloc] initWithBytes:buffer length:numBytesEncrypted];
return [returnData base64EncodedStringWithOptions:0];
}
free(buffer);
return nil;
}
【问题讨论】:
-
是的,密钥长度为 32 字节。我已经更改了密钥类型,但结果是一样的。任何想法设置填充?我测试的所有内容都是错误的,结果为 NULL
-
我发现我可以用 Rijndael_128 而不是 Rijndael_256 解密 PHP 中的结果。
标签: php ios encryption aes