有時在我的表單中,我發現自己使用隱藏的輸入,其中包含一些不需要客戶端知道的值。 (實際上,即使他知道不是一個大問題,但是我不喜歡這樣...這就是我不需要一個非常安全和複雜的加密東西)
生成可直接在URL中使用的加密字符串
基於這裏的一些答案especially this),我建立這個隔壁班
class Crypto
{
const ENCRYPT_METHODE = "AES-256-CBC";
const SECRET_HASH = "25c6c7ff35b9979b151f2136cd13b0ff";
private static function GetIV()
{
if (empty($_SESSION['crypto']['iv'])) {
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$_SESSION['crypto']['iv'] = mcrypt_create_iv($iv_size, MCRYPT_RAND);
}
return $_SESSION['crypto']['iv'];
}
public static function Encrypt($value)
{
return openssl_encrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
}
public static function Decrypt($value)
{
return openssl_decrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
}
}
...直到現在Crypto
工作的好與隱藏的輸入,但有時產生需要編碼把之前在URL
所以串,如何提高這個班級做我需要的東西?
或者還有其他更好的方法來加密< =>解密字符串嗎?
編輯
而不是試圖產生一個有效的URL字符串值(直接與openssl_decrypt
),它看起來是增加urlencode
/urldecode
的方法將工作得很好,這就是如何加密方法將看起來像:
class Crypto{
// ...
public static function Encrypt($value){
$encrypted = openssl_encrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
return urlencode($encrypted);
}
public static function Decrypt($value){
$value = urldecode($value);
return openssl_decrypt($value,
self::ENCRYPT_METHODE,
self::SECRET_HASH,
0,
self::GetIV());
}
}
我覺得像它會正常工作無處不在,感謝this answer
你能告訴我們你是如何將這些值放到URL中的嗎? – Tom
@thebluefox這就是http://website.com/noof.php?xvalue=enctyptedString! – BBeta
我想知道你是如何在你的HTML中使用你的類中的方法的。我知道一個URL的樣子。 – Tom