2011-12-18 143 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更安全。