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 に答える