2014-10-11 91 views
0

我目前正在研究Laravel4.2並開始與笨 相比,但我發現下面的代碼 上加密密鑰性格有些問題,我用這個鍵來測試在Laravel 4.2,但它不工作,因爲我得到的消息 「mcrypt_encrypt():關鍵的尺寸對於這種算法太大」爲什麼Laravel4.2加密密鑰少於CodeIgniter中的加密密鑰字符?

但它的時候,我用了相同的加密密鑰最新版本的工作完美。

我的問題:如何Larave 4.2安全的,如果我用MCRYPT_RIJNDAEL_256 加密的主要

  • '關鍵'=> 「SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZK N5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQk rdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrdSdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd」,
  • '密碼'=> MCRYPT_RIJNDAEL_256,
+0

你知道你的鑰匙只有50個字符重複30次嗎?你爲什麼這麼做?會更好地完全隨機 – Laurence 2014-10-11 10:16:14

+0

換班, 我不想這樣做,我也不明白,我應該如何選擇類型的加密密鑰爲Laravel 4.2,爲什麼我問所有的專家,現在請你能推薦我使用它嗎? **我應該使用哪一個字符來進行我的加密?** – hengsopheak 2014-10-12 06:27:24

回答

1

AES密鑰需要是從在長度的隨機和是16,24或32個字節沒有區別。看來Laravel爲AES密鑰添加了一個額外的檢查是一個有效的大小。

基本上,PHP的mcrypt所做的(不確定C代碼)是,如果密鑰小於32字節,它將擴展帶有00值的字節的密鑰數據,直到達到第一個合法的AES密鑰大小。如果密鑰大於32個字節,則將其簡化爲32個字節。這完全違反了處理密鑰方面的任何良好做法。

所以你的AES密鑰可能只是被解釋爲編碼爲ASCII的'SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd'。密鑰的這種當然不能提供AES-256的全部安全性,因爲密鑰明顯減少密鑰空間(如果使用62個字符的字母表,假設字母表中的每個值具有相同的可能性,則略大於8個字節) 。

並注意MCRYPT_RIJNDAEL_256 AES,所以你將只能與支持Rijndael算法與塊大小的256庫解密。

+0

Owlstead, 因此,我必須起訴** SdRlCcZtE2ujlTZv5S3JZKN5bJvGQkrd **而且它可能安全或可能用於加密嗎? – hengsopheak 2014-10-12 06:59:55

+0

好吧,顯然* *特定的密鑰已經不再安全了,現在你已經在這裏發佈了它。如果密鑰是由隨機數生成器生成的,但它仍然具有足夠的AES-128強度(這非常安全),但我不會再使用AES-256。如果你想擁有一個安全密鑰,用一個隨機數生成器生成它,如果你需要一個字符串*,用十六進制數來存儲密鑰值。 – 2014-10-12 16:24:09