1

それで、mcrypt を使用して Rijndael-256 を解読しようとしていますが、これで問題ありません。ただし、正確に 32 バイトの長さになるように、文字列の最後にパディングがあります。理由はありますか?これが出力するものです。

array (size=9)
  'cryptedText' => string 'O¿{žû¦ê§Þøµ; *¬rÄÅϧ„•T' (length=32)
  'IV' => string 'ÄêKG£ED^°“F¨ŠêFx)\e_¶üŠèJÂ|' (length=32)
  'title' => string 'Untitled' (length=8)
  'deleteKey' => string 'ff349d33af4cff27143f66680586121e3c17d1f81aee42c7beb645684ca95558447f0eba757c7ecc785ea39633cfad5a6144fd5ea5028ca9c342e15291d7fd60' (length=128)
  'date' => string '1356827615' (length=10)
  'uid' => string '0' (length=1)
  'urlID' => string '2' (length=1)
  'id' => string '2' (length=1)
  'decryptedText' => string 'hello woaaaaaaaaarld������������' (length=32)
                                                 ^^^^^^^^^^^^ This

32 文字を超える文字を追加すると、64 文字にパディングされます...

これが私がそれを解読する方法です:

        $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_256, '', MCRYPT_MODE_CBC, '');

        if (mcrypt_generic_init($cipher, $key, $result_set['IV']) != -1) {
            $decrypted = mdecrypt_generic($cipher, $result_set['cryptedText']);
            mcrypt_generic_deinit($cipher);
            mcrypt_module_close($cipher);
            $result_set['decryptedText'] = $decrypted;
        }

Rijndael-256 で暗号化されたデータは、IV と同様に LONGBLOB (バイナリ) データ型で私のデータベースに保存されています。

4

2 に答える 2

2

http://php.net/manual/en/function.mcrypt-encrypt.php

データ

指定された暗号とモードで暗号化されるデータ。 データのサイズが n * ブロックサイズでない場合、データは '\0' でパディングされます

返される暗号文は、data で指定されたデータのサイズよりも大きくなる場合があります。

于 2012-12-30T00:49:22.867 に答える
0

データを暗号化する前に base64_encoding すると、この問題は解決しました。わーい!

于 2012-12-30T00:49:56.313 に答える