我正在尝试使用RNCryptor在iOS端进行AES256加密,在PHP远程站点进行AES256解密。但是我无法用php获得正确的解密数据。如果我做错了,请帮忙检查一下。
以下是我的iOS代码。
NSString *key = @"1234567890123456789012";
NSData *encryptedData = [RNEncryptor encryptData:data
withSettings:kRNCryptorAES256Settings
password:key
error:&error];
然后我将encryptedData发布到PHP中的服务器。下面是我的PHP代码。
$key ="1234567890123456789012" //32-bit key
$username = aes256Decrypt ($key, $username);
function aes256Decrypt($key, $data) {
if(32 !== strlen($key)) $key = hash('SHA256', $key, true);
$data = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC,
str_repeat("\0", 16));
$padding = ord($data[strlen($data) - 1]);
$result = substr($data, 0, -$padding);
return substr($data, 0, -$padding);
}
答案 0 :(得分:1)
基于一些快速研究,似乎RNCryptor有自己的output format。下面显示了一个示例(取自我链接的页面):
DESCRIPTION: | version/cryptor | options | encryptionSalt | HMACSalt | IV | ... ciphertext ... | HMAC |
BYTE INDEX: | 0 | 1 | 2-9 | 10-17 | 18-33 | <- ... -> | n-32 - n |
在尝试解密之前,您的PHP代码必须从此格式中提取数据。您需要IV值和密文才能检索原始明文。
或者,切换到iOS的不同加密方法,但不发明自己的数据格式。