2011-12-18 146 views
9

我正在尋找一種兼容JavaScript和Java的安全對稱密鑰加密算法。對稱密鑰加密算法

我試過實施一個,但我有一些編碼問題。

+2

「兼容」是什麼意思? – hellectronic 2011-12-18 16:16:21

+0

所以我可以使用JavaScript進行加密並使用Java進行解密,反之亦然,無需編碼問題。 – 2011-12-18 16:26:45

+2

我想推薦你閱讀[絕對最低限度的每個軟件開發人員,絕對肯定,肯定必須知道Unicode和字符集(沒有藉口!)](http://www.joelonsoftware.com/articles/Unicode.html) – hellectronic 2011-12-18 16:32:41

回答

32

你不想用JavaScript加密,especially on the client-side where it is open to tampering,並且沒有cryptographically secure random number generator

我試過執行一個,但我有一些編碼問題。

你試過編寫自己的加密算法嗎?你已經違背了安全世界所珍視的一切。

enter image description here

:解釋加密的工作原理是嚇壞了,人們會搞砸,因爲他們不明白它背後的數學號實際教程,其實我已經在他們中的一個看到了這一點

如果你不理解加密,事實上,什麼「密碼安全的僞隨機數生成器」實際上是,而且它的常見攻擊,你不應該那樣做。

如果您不理解旁道攻擊等事情,則不應該這樣做。

如果你不明白加密中發生了什麼,並且至少讀了兩本關於它的書,你就沒有實現它的業務。

Crypto不是一個神奇的黑匣子,即使沒有在打包解決方案中觸摸任何代碼,它也是非常容易搞砸的事情。

什麼應該你呢?忘記JS加密。我知道,我自己嘗試過。這是浪費時間。從我的錯誤中學習。

去獲得一個SSL證書,SSL是我們加密傳輸級別從服務器到客戶端的消息的最佳方式。它是儘可能安全的,你可以得到。如果你面對一個可以擊敗SSL的Advesary,相信我,你的基於JS的加密也會受到攻擊。

一旦它在安全的地方被篡改,它就會被加密。其他任何事情都會浪費你的時間。

此外,再去讀這些書:當你明白他們回來,並在我的尖叫,爲什麼我錯了,不知道你需要多少JS上

This one is free This one is cash money

然後客戶做密碼。

3

在JS中有一個很好的DES(和擴展3DES)實現,我經常使用它。星期一,當我在辦公室並準備好時,我會提供鏈接。這個結果(在傳輸的base64編碼之後)與.Net/Mono(內置),Java(bulitin)和PHP(mcrypt)完美協同工作。

找到鏈接,但兩者都已死亡:http://www.shopable.co.uk/des.htmlhttp://www.netdealing.com。我已經把它放在http://pastebin.com/KbRsWKJY

+1

Mhh在大學時他們教過我,DES現在很容易描述...... AES應該沒問題,但我不認爲JavaScript能夠處理這樣的事情。 – 2011-12-18 23:35:18

+2

由於強力攻擊,DES很容易破譯,但DESede不易破譯。 AES比DESede更快*實現,所以如果JavaScript能夠處理DESede,它當然可以處理AES-128。只使用DESede用於遺留實現(或者,如果找不到其他庫並理解小塊大小,弱密鑰,密鑰中的奇偶校驗位等少數弱點)。 – 2011-12-19 02:25:37

+1

讓我澄清一下:指向JS代碼並不意味着,我無條件地接受(3)DES在客戶端的未反應的用法。但我認爲這是一個事實,使用JS加密技術可以成爲防禦深入的一個有意義的層。所以我使用它,我認爲它是有道理的。 – 2011-12-27 11:49:26

1

This page有CTR模式,這在Java中可用。我建議使用128位的密鑰,否則在更大的密鑰大小上可能會遇到有關Java導出策略的問題。

Here是一個使用一些非常有用的加密方法的頁面,包括密碼加密技術和帶有完整性檢查和認證的ciphres,儘管您可能需要Java上的彈性城堡庫來匹配所有這些。

有很多關於JavaScript的庫,但是其中任何一個都會出現字符編碼問題。所以確保你在JavaScript端和Java端都使用相同的編碼。快速查找可以確保JavaScript在內部使用UTF-16,但不要讓我陷入困境。

最後,不要在家裏嘗試這個,圖書館在那裏,使用它們(特別是如果他們提及測試和/或官方測試向量)。

+0

我在哪裏可以找到使用Bouncy種類的AES的Java實現? – 2011-12-19 15:21:03

+0

Bouncy Castle圖書館實施JCE/JCA供應商。所以大部分功能都被添加到Java本身的加密API中。您可以通過使用例如彈出框來訪問彈性實現。 Cipher.getInstance(「算法/模式/填充」,「BC」);但是隻有在你已經將提供者添加到安全類之後。您也可以直接直接訪問安全功能的低級BC實現。 – 2011-12-20 16:45:16

+0

有兩個兼容的例子嗎? JavaScript:http://www.movable-type.co.uk/scripts/aes.html; 012hJava:http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html – 2011-12-20 21:42:07

0

像其他答案一樣,如果您不必使用JavaScript進行加密,請避開它​​。但是,有一些有效的用例在JavaScript中進行加密。

當需要的時候,我推薦這個庫:https://keybase.io/triplesec/

它比另一個答案鏈接到的DES更安全。