我正在寻找一种兼容JavaScript和Java的安全对称密钥加密算法。
我尝试过实现一个,但我遇到了一些编码问题。
答案 0 :(得分:32)
您不希望使用JavaScript加密especially on the client-side where it is open to tampering,并且没有cryptographically secure random number generator。
我尝试过实现一个,但我遇到了一些编码问题。
您尝试编写自己的加密算法?你已经违背了安全世界所珍视的一切。没有。解释加密工作原理的实际教程非常害怕人们会因为不了解背后的数学而搞砸了,我实际上已经在其中一个中看到了这一点:
如果您不了解加密,那么“加密安全伪随机数生成器”实际上是什么,以及对它的常见攻击,您不应该这样做。
如果您不理解旁道攻击等问题,则不应该这样做。
如果您不了解加密中发生了什么,并且已经阅读了至少两本书,那么您就无法实施它。
加密不是一个神奇的黑盒子,即使没有在打包的解决方案中触及任何代码,它也非常容易搞砸。
应该你做什么?忘记JS加密。我知道,我自己也尝过了。这是浪费时间。从错误中吸取教训。
获取SSL证书,SSL是我们加密从服务器到客户端的传输级别的消息的最佳方式。它就像你能得到的一样安全。如果你面对的是可以击败SSL的advesary,相信我,你的基于JS的加密也会受到损害。
一旦它在服务器上安全不被篡改,加密它。还有其他方法浪费你的时间。
另外,请阅读这些书:
然后当你理解他们回来并且尖叫我为什么我错了,并且不明白你在客户端需要多少JS来做加密。
答案 1 :(得分:3)
在JS中有一个很好的DES(以及扩展3DES)实现,我经常使用它。星期一,当我在办公室并准备就绪时,我会提出这个链接。此结果(在传输的base64编码之后)与.Net / Mono(内置),Java(bulitin)和PHP(mcrypt)完美配合。
找到了链接,但两者都已死亡:http://www.shopable.co.uk/des.html和http://www.netdealing.com。我把它放在了http://pastebin.com/KbRsWKJY
上答案 2 :(得分:1)
This page具有点击率模式,可在Java中使用。我建议使用128位密钥,否则可能会遇到有关较大密钥大小的Java导出策略的问题。
Here是一个使用一些非常有用的加密方法的页面,包括密码加密技术和带有完整性检查和身份验证的ciphres,尽管您可能需要Java上的弹性城堡库来匹配这些。
JavaScript中有大量的库,但任何一个都会出现字符编码问题。因此,请确保在JavaScript端和Java端使用相同的编码。快速查看可以确保JavaScript在内部使用UTF-16,但不要让我感到高兴。
最后,不要在家里尝试这个,库就在那里,使用它们(特别是如果它们提到测试和/或官方测试向量)。
答案 3 :(得分:0)
与其他答案一样,如果您不必使用JavaScript加密,请避免使用它。但是,有一些有效的用例可以在JavaScript中加密。
如果需要,我建议使用此库:https://keybase.io/triplesec/。
它比DES更安全,另一个答案链接到DES。