2012-09-25 55 views
1

我在我的登錄模型中實現了用於解密/加密用戶密碼(在加密版本中存儲在cookie中)的函數。除非重新啓動瀏覽器並嘗試使用cookie以密碼登錄時,所有工作都正常。添加空格來加密密碼?

解析器告訴我這是錯誤的密碼,即使我可以看到它是正確的,當我回顯出來。因此,我嘗試了一個「strlen」來查看密碼有多少個字符,並且它說32(!)。我能想到的唯一的事情就是(在這種情況下)已經添加了28個空白空間,這是無法用回聲看到的。

我真的很感激,如果有人能告訴我發生了什麼事以及如何解決它?

function decrypt($encrypedText) { 
    $key = "The secret key is"; 
    $decryptedText = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($encrypedText), MCRYPT_MODE_ECB); 

    echo $decryptedText;   // "abcd" <- what I put in 
    echo strlen($decryptedText); // 32 (?) 

    return $decryptedText; 
} 
+3

你在哪裏定義'$ decryptedText'?它沒有在函數中分配,它既不是參數也不是全局的。 – andrewsi

+3

[Everything](http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html)你[是](http://stackoverflow.com/questions/1054022/最好的方式來存儲在數據庫中的密碼)嘗試[](http://stackoverflow.com/questions/947618/how-to-best-store-user-information-and-user-login-and -password)do是[wrong。](http://blog.moertel.com/articles/2006/12/15/never-store-passwords-in-a-database)請停止你正在做的事,並瞭解正確的密碼存儲和處理。 – DampeS8N

+0

@ DampeS8N:這只是我現在學習cookie的一個實驗。 – holyredbeard

回答

3

這是因爲32個字節是Rijndael算法256的塊大小(即32 = 256/8)並且解密數據用'\0'填充以匹配那個長度。

要糾正這一點,你可以刪除這些字符,像這樣:

return rtrim($decryptedText, '\0'); 
+0

我首先想到它的工作原理,但是我的測試表明結果仍然包含32個字符。 :/ – holyredbeard

+0

@holyredbeard這是奇怪的,你可以做bin2hex()來確定哪些字符被添加? –

1

除去白色空格使用PHP trim()功能

$password=trim($_COOKIE("value")); 

它將從開頭刪除空格和結束