【问题标题】:RSA Encryption in javascript and Decryption in Javajavascript中的RSA加密和Java中的解密
【发布时间】:2018-12-31 16:44:54
【问题描述】:

我有一个应用程序,其前端为 HTML、Javascript,后端为 Java, 我需要使用 RSA 发送密码和敏感信息。我在javascript中使用JSEncrpt,在java中使用Bouncy castle。 我需要知道如何管理密钥。如果我在 javascript 中动态创建密钥,我如何将私钥发送到我的后端,反之亦然。我的 javascript 代码对用户可见,在 javascript 中存储私钥不是一种选择。

Javascript 代码:

var text = "Hello World";
var privkey="MIICdQIB..........";
var pubkey="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCvFZQtGLPQKV0h....";

var encrypt = new JSEncrypt();
encrypt.setPublicKey(pubkey);
var ciphertext = encrypt.encrypt(text);
console.log("ciphertext  : " + base64ToHex(ciphertext));

var decrypt = new JSEncrypt();
decrypt.setPrivateKey(privkey);
var plaintext = decrypt.decrypt(hexToBase64(cipher));
console.log("plaintext  : " + plaintext);

对于 java 代码,请参见 http://www.mysamplecode.com/2011/08/java-rsa-encrypt-string-using-bouncy.html 上的示例

【问题讨论】:

  • 如果我在 javascript 中动态创建密钥,如何将私钥发送到我的后端,反之亦然 不要通过网络发送私钥。为什么不直接使用 SSL 加密通道来保护数据?
  • 我需要双重加密,虽然我使用的是https,但仍然需要通过RSA算法进行双向通信。
  • 好的,如果您需要双向加密,每个部分(前端、后端)都需要一对 RSA 密钥。在任何情况下都不需要将私钥发送给对方。消息用接收者的公钥加密,用私钥解密。要在客户端安全地存储生成的密钥对,您需要使用本机 WebCryptographyApi。该库允许在不暴露密钥材料的情况下生成和使用密钥
  • 谢谢你会尝试使用它。

标签: javascript encryption rsa bouncycastle jsencrypt


【解决方案1】:

对于 java 代码,请参见 http://www.mysamplecode.com/2011/08/java-rsa-encrypt-string-using-bouncy.html 上的示例

请注意,从可用性的角度来看,此示例是错误的。 RSA 本身旨在加密一小段信息(例如对称加密的密钥),而不是任何更长/更大的数据。看看hybrid cryptosystem。并且当使用较旧的 PKCS1.5 填充时,加密数据需要具有高熵。所以 - 不要对数据本身使用 RSA,而是使用混合密码系统(大多数高级库都会这样做)。

我需要双重加密

它增加了复杂性,但没有必要的安全性。

仅当您打算存储或重新发送加密数据时,您才需要在 TLS (https) 之外加密数据。也许你会这样做,只是我们没有看到任何理由。

问题是 - RSA 旨在确保数据的完整性和机密性。 TLS(基于 RSA 或椭圆曲线)还可以防止 MIM(中间人)攻击。如果您随机生成密钥而不检查验证身份的可能性(使用证书颁发机构),则 MIM(在 TLS 之后)是可行的。

我需要知道如何管理密钥。如果我在 javascript 中动态创建密钥,我如何将私钥发送到我的后端,反之亦然。

在非对称加密 (RSA) 中,发送者只需要目标的公钥来加密数据。并且为了完成安全性,目标需要发送者的公钥来验证签名(如果消息已签名)

基本上,您可以生成一个随机(对称)加密密钥并使用 RSA 加密该密钥。然后客户端可以将IV(salt,与对称加密一起使用)、RSA加密的对称密钥、加密的数据(使用对称加密密钥)和MAC(消息验证码-哈希和签名)发送到另一端。

【讨论】:

    猜你喜欢
    • 2014-07-12
    • 2011-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2013-03-02
    相关资源
    最近更新 更多