2012-04-08 58 views
3

我已經在PHP中廣泛使用Rijndael 256bit加密API,並且希望將其用於使用JavaScript編寫的API包裝器,但是我一直無法找到一個解決方案,獲得的結果與在PHP中。有沒有像PHP一樣的Rijndael 256bit加密的JavaScript庫?

通過PHP做什麼,我的意思是以下幾點:

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$password,$secretInformation,MCRYPT_MODE_CBC,$iv)); 

base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$password,$secretInformation,MCRYPT_MODE_EBC)); 

..以及解密的變體。

我知道許多256位AES庫沒有得到與PHP使用Rijndael 256位加密相同的結果,因此我想知道是否有一個庫能夠完成上述示例中的PHP ?

謝謝!

+1

這會將您的密碼暴露給用戶,使加密不是非常有用... – 2012-04-08 21:25:09

+0

你是什麼意思? – Grumpy 2012-04-08 21:27:09

+0

爲什麼你張貼這樣一個鏈接脾氣暴躁?這不是話題。 – 2012-04-08 21:38:24

回答

1

MCRYPT_RIJNDAEL_256不是具有256位密鑰的AES,其基本上具有256位塊大小的AES(AES通常具有128位塊大小)。 Rinjdael有很多選項,並通過將這些選項縮小到128或256位密鑰大小而被標準化爲AES。因此,必須庫支持標準(AES)而不是原型。

如果您想要AES 256或128,這幾乎是所有庫實際支持的功能,請使用128位或256位密鑰的MCRYPT_RIJNDAEL_128。塊大小的差異並沒有真正使差異安全明智。

此外,使用原始密碼作爲密鑰是一個非常糟糕的主意。您可以使用基於密碼的密鑰派生函數(如PBKDF2)從密碼中獲取密鑰。

+0

你能相信嗎,我只是檢查了這個問題昨天晚上有答案,沒有發現?至於密碼,爲什麼它是一個壞主意?它需要是一個隨機字符串,對嗎?那麼爲什麼md5()在密碼上散佈鹽是一個壞主意? – kingmaple 2012-05-03 05:42:00

+0

儘管我沒有真正找到解決方案,但我會接受這個答案作爲回答,因爲它讓我更好地瞭解手頭的問題。 – kingmaple 2012-05-03 05:42:44

+0

本來我以爲你只是在輸入密碼。然而,md5不是最好的想法,要麼md5()得到一個隨機字符串,但md5,sha1,sha512等是非常快的函數來計算。如果你的用戶使用了一個普通的密碼,那麼它很容易測試大量的猜測(你可以在GPU上做一秒2300萬)。因此,在代替你用的東西是緩慢的,不慢,足以降低運行速度,但足夠慢,慢下來的人誰是剛上的加密數據的一個副本,他們got.Hence使用PBKDF2 – imichaelmiers 2012-05-03 06:03:20