ユーザが特定の予約の詳細にアクセスできるようにするには、GET文字列を電子メールに渡す必要があります。 つまり/bookingconformation.php?bookingID=123。私はそれを推測し、アクセス他のユーザーが(予約の詳細は本当にあまりにも敏感ではないが、細部を予約することはほぼ不可能になることを期待してbase64で(編集とmcryptの)(とbookingIDを暗号化しようとしていますbase64とmcryptによる暗号化について
!) )。これは、意図されたユーザだけが予約の形態にアクセスできるようにするためです。
私は暗号化の専門家から遠いので、私はここで主に見つかったコードを使用しています(stackOverflow)!
私はいくつかの問題を抱えています。私が使用しています コードは以下であり、この下に、私は
/**
* a basic encryption for things like IDs, so links can be created and emailed to i.e booking details
* @param int/str $x what is to be encrypted
* @ENCRYPTION_KET str the encyption key
* @return encrypted string
*/
public static function basicEncrypt($x, $ENCRYPTION_KET) {
$key = pack('H*', $ENCRYPTION_KET);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $x, MCRYPT_MODE_CBC, $iv);
$ciphertext = $iv . $ciphertext;
$ciphertext_base64 = base64_encode($ciphertext);
$encrypted_x = urlencode($ciphertext_base64);
return $encrypted_x;
}
/**
* a basic de-cryption for things like IDs, so links can be created and emailed to i.e booking details
* @param str $x what is to be de-crypted
* @ENCRYPTION_KET str the encyption key
* @return decrypted string
*/
public static function basicDecrypt($x, $ENCRYPTION_KET) {
$x = urldecode($x);
$ciphertext_dec = base64_decode($x);
$key = pack('H*', $ENCRYPTION_KET);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$iv_dec = substr($ciphertext_dec, 0, $iv_size);
$ciphertext_dec = substr($ciphertext_dec, $iv_size);
$de_crypted_x = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
return $de_crypted_x;
}
1号が午前問題のリストです:basicEncryptを()を使用しては異なる暗号化文字列私は同じのために、すなわち(それを使用するたびになりますが123の予約ID)。 暗号化文字列が毎回異なるかどうかは同じですが、暗号化文字列が同じであるかどうかは関係ありません。毎回異なる文字列を返す必要があるかどうか誰にでも教えてもらえれば、これがなぜなのか理解しやすい説明があれば感謝します。
問題2: 上記のコードは、ほとんどの時間を動作します....(多分80%)が、他の回、それは正解に復号化していない...私はいけない理由を理解していれば:-(。誰もが、それは私は非常に感謝される100%の時間を動作するように私は私が間違っているのかを知るようにでき
問題3:!(可能性の問題) i)は(でurlencode()およびurldecodeを使用しています。私はstackOverflowの多くを読んだが、私はこれを使用する必要がある場合はうまくいかない!私は疑問を持っているissue 2がこれによって引き起こされるかもしれないが、正しい方法を理解できないURLを安全にすることができます。私は(ここで見つかった)以下のようなものでURLENCODEを交換しようとしているが、これは、時間も
function base64_url_encode($input) {
return strtr($input, '+/=', '-_,');
}
function base64_url_decode($input) {
return strtr($input, '-_,', '+/=');
}
の0%を動作するように上記の原因私はできるように使用しています方法であり、ユーザーは予約の詳細を確認するOK /お勧めですか? (データは本当に機密ではないと言われているように、ユーザー名、REFの予約、予約されたもののみが含まれています。
誰かが(私が訂正できるように)指摘できれば私の方法でのエラーは素晴らしいだろうと私が何をやっているのか理解するのを助けてくれます。 ! フォード
で同じパラメータを含めるようにしてください:誰がリンクを変更しないことを確認するには、単に署名のすべてのパラメータを含めます@CharlotteDunois basee64_decodeは "解読"しません(あなたが知っているように)...デコードします。フォード:issue1は問題ではありません。ランダムな「初期化ベクトル」が毎回使用されています...異なる暗号文の結果となります –
@BradKentとotherPosters、私は今何が違うか見ています...シンプルですが、 – Ford
[defuse/php-encryption](https://github.com/defuse/php-encryption)を使用した方があなたの人生を楽にするかもしれません。 –