2017-02-16 64 views
0

有時在我的表單中,我發現自己使用隱藏的輸入,其中包含一些不需要客戶端知道的值。 (實際上,即使他知道不是一個大問題,但是我不喜歡這樣...這就是我不需要一個非常安全和複雜的加密東西)
生成可直接在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

+0

你能告訴我們你是如何將這些值放到URL中的嗎? – Tom

+0

@thebluefox這就是http://website.com/noof.php?xvalue=enctyptedString! – BBeta

+0

我想知道你是如何在你的HTML中使用你的類中的方法的。我知道一個URL的樣子。 – Tom

回答

2

你可以使用url_encode()以確保每個字符都可以傳遞到一個URL並urldecode()得到字符回來。

+0

這是我所知道的,但這會影響加密的價值,所以它不會被正確加密? – BBeta

+0

它應該。但我沒有用加密字符嘗試過...... – Ad5001

+0

你知道其他簡單的加密/解密字符串的方法嗎? – BBeta

相關問題