1

我正在尝试使用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);
}
4

1 回答 1

1

根据一些快速研究,RNCryptor 似乎有自己的输出格式。下面显示了一个示例(取自我链接的页面):

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 的不同加密方法。

于 2012-11-30T08:34:20.563 回答