我需要加密用户在客户端表单上输入的数据。我的环境没有ssl加密,但我发现在我的情况下,我可以通过RSA加密实现类似的结果。公钥将在客户端使用,私钥的所有者稍后将能够检索和解密数据。
在我走这条路之前,我想确保我没有忽视任何关键问题。所以这里有几个问题:
一般来说,我对这个JavaScript RSA加密技术的任何建议感兴趣。
更新:我到目前为止找到的唯一RSA JavaScript在此页面上: http://www.ohdave.com/rsa/ 有关那个的任何反馈吗?
此外,如果您有任何建议,我可以使用除RSA之外的加密。我的约束是拥有100%的JavaScript解决方案。
答案 0 :(得分:4)
这是可能的(例如www.jcryption.org)但是应该指出,这绝不是TLS的替代品 - 主要是因为这样的技术在客户端和服务器之间不提供可强制执行的信任或认证;您的脚本无法验证其中嵌入的公钥是您的公钥,任何可以介入您和/或之间的公钥。你的客户可以替换他们自己的。
答案 1 :(得分:1)
https://sourceforge.net/projects/pidcrypt/似乎越来越受欢迎。我正在评估它在我们的项目中使用。如果我设法使用此库,将发布更新。
答案 2 :(得分:1)
看看asmcrypto.js - 实施了很多加密算法,包括RSA及其really damn fast。
BTW我是一位作家,很乐意收到一些反馈并回答你的问题。
答案 3 :(得分:1)
如果您的JavaScript环境是安全的(例如https),并且您不需要支持旧版本的浏览器,则可以使用 Subtle.Crypto 创建良好的安全模型。您将需要很好地了解自己在做什么,以及如何在您的环境中实现加密,签名,密钥存储等。 滚动自己的游戏有很多陷阱。
一个好的开始是考虑是否需要分发单个AES密钥以进行快速安全的加密。如果是这样,那么您可能想使用RSA加密和传输单个AES密钥,然后使用AES进行大部分加密。请牢记签名。在许多情况下,只需对有效负载进行签名,以便可以将其视为完整就可以进行验证。可能没有必要隐藏静止或传输中的数据。
https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto
答案 4 :(得分:0)
普通轻量级javascript库crypto4js已实现RSA加密。您可以使用它https://github.com/atul19971/crypto4js。