0

php decrypionを使用して、次のことを確認しています。リクエストに返信するメールアドレスが、リクエストを送信したメールアドレスと同じである。

これはコードですが、下部では単純に失敗します。

URLは単純です:

blah.com/page?keyemail=fSHEk8KC17siklGHsj0HJA==

以下のコードは、暗号化/復号化が正常に機能していることを確認するために行ったいくつかのテストも示しています...コードをエコーダウンして何が起こっているかを確認しました

$key="XiTo74UI09wwe4YeUmuvbL0E";

$iv = mcrypt_create_iv (mcrypt_get_block_size (MCRYPT_TripleDES, MCRYPT_MODE_CBC), MCRYPT_DEV_RANDOM);

// Encrypting
function encrypt($string, $key) {
    $enc = "";
    global $iv;
    $enc=mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_ENCRYPT, $iv);

  return base64_encode($enc);
}

// Decrypting
function decrypt($string, $key) {
    $dec = "";
    $string = trim(base64_decode($string));
    global $iv;
    $dec = mcrypt_cbc (MCRYPT_TripleDES, $key, $string, MCRYPT_DECRYPT, $iv);
  return $dec;
}

// test example
$email = 'me@me.com';

echo "email is $email<br /><br />";

$email_key = encrypt($email, $key);

echo "key is $email_key<br /><br />";

$email_key2 = decrypt($email_key, $key);

echo "decrypted is $email_key2<br /><br />";
// END test example, all is ok


// this is the code that fails
$to_de = $_GET[keyemail];

echo "keyemail again is $to_de<br /><br />";

$email_key3 = decrypt($to_de, $key);

echo $email_key3;

$ email_key3が何らかの形でエンコードされているとエコーすると、何が返されますか?me@me.comである必要があります

私はおそらく明らかな何かを見逃していますが、それは私を失いました!

4

2 に答える 2

0

IV各ページで新しいを生成することはできませんIV。暗号化ステップからファイルまたはデータベースに保存するか、暗号化された文字列に追加する必要があります。次のページで新しい IV を生成しても、文字列を解読することはできません。

また、可能であれば、暗号化されたフォームではなく、メールのハッシュ (およびソルト) を渡します。

于 2012-10-15T15:31:43.693 に答える
-1

使用している暗号化方法がランダムソルトを追加していることに気づきました。つまり、同じ文字列を同じキーで暗号化しても、同じ出力にはなりません。ランダム化されていないKDFを使用してみてください。このトピックの答えを試してください:https ://stackoverflow.com/a/1289114/1745542

于 2012-10-15T15:25:20.743 に答える