0

ブローフィッシュcbcモードを使用して、暗号化されたトークンを作成したいと思います。トークンを作成してすぐに復号化すると、正しく機能します。ただし、暗号化されたトークンを配置しSESSION、後続の要求中にそれを復号化しようとすると、復号化によってガベージが生成されます。

これは私のコードです。私はSESSIONテストに使用しています。最終的には、代わりにこれらの文字列をデータベースに保存します。

session_start();
define("key","v8nga4r76qlipm111jnioool");
define("iv",substr(md5(uniqid(rand(),1)),0,8));
require_once("Crypt/Blowfish.php");

$str = "Blowfish_test";
// encode start!!
$blowfish = Crypt_Blowfish::factory("cbc", key, iv);
$encrypt = $blowfish->encrypt($str);
$encrypt64 = base64_encode($encrypt);
$_SESSION["test"] = $encrypt64;

これまでのところ、すべてが正しいです。同じリクエストで、すぐに(からSESSION)デコードした場合、結果は期待どおりです。

// decode start!!
$blowfish = Crypt_Blowfish::factory("cbc", key, iv);
$decrypt64 = base64_decode($_SESSION["test"]);
$decrypt = $blowfish->decrypt($decrypt64);
$trim_decrypt = rtrim($decrypt, "\0");
echo "Before encryption : " . $str ."<br>";
echo "Encrypted string &nbsp&nbsp: " .$encrypt64. "<br>";
echo "decrypted string &nbsp&nbsp: " .$trim_decrypt. "<br>";

コードの2番目のブロックのみを別のページに配置すると(以前に生成された文字列が復号化されます)、復号化された文字列はガベージになります。

暗号化->セッション["テスト"]->復号化---問題ありません

session["test"]->復号化---問題

ここで何が起こっているのですか?

4

1 に答える 1

0

この超遅延をお詫び申し上げます。その時のコメントでこの問題を解決したので、コミュニティウィキを使ってこの質問を閉じます。

---追加---
問題は解決しました

// encode
// At the same time save the initialization vector
$_SESSION["test"] = $encrypt64;
$_SESSION["iv"]   = iv;

--- other file ---
// decode
$blowfish = Crypt_Blowfish::factory("cbc", key, $_SESSION["iv"]);
于 2018-07-23T02:43:56.017 に答える