javascript中的RSA加密和Java中的解密

javascript中的RSA加密和Java中的解密,javascript,encryption,rsa,bouncycastle,jsencrypt,Javascript,Encryption,Rsa,Bouncycastle,Jsencrypt,我有一个应用程序,前端是HTML、Javascript,后端是Java, 我需要使用RSA发送密码和敏感信息。我在javascript中使用JSEncrpt,在java中使用Bouncy castle。 我需要知道如何管理密钥。如果我在javascript中动态创建密钥,如何将私钥发送到后端,反之亦然。我的javascript代码对用户可见在javascript中存储私钥不是一个选项 Javascript代码: var text = "Hello World"; var privkey="MII

我有一个应用程序,前端是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代码,请参见以下示例:

有关java代码,请参见以下示例:

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

我需要双重加密

它增加了复杂性,但并不是必要的安全性

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

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

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

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


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

若我在javascript中动态创建密钥,那个么我如何才能将私钥发送到后端,反之亦然—不要沿网络发送私钥。为什么不使用SSL加密通道来保护数据?我需要双重加密,尽管我使用的https仍然需要通过RSA算法进行双向通信。好的,如果需要双向加密,每个部分(前端、后端)都需要一对RSA密钥。在任何情况下都不需要将私钥发送给另一方。消息用接收方的公钥加密,用私钥解密。为了在客户端安全地存储生成的密钥对,您需要使用本机WebCryptographyApi。此库允许生成和使用键,而无需公开键控材料。您将尝试使用该库。