jsencrypt
jsencrypt copied to clipboard
不能通过公钥解密
在客户端只存了公钥,使用公钥加密,服务端可以解密成功;服务端私钥加密,js没有公钥的解密方法
我也遇到了,你咋解决的?
菜鸟,几经探索解觉了这个问题
首先根据 jsencrypt 的官方文档,是不支持使用 公钥对数据解密的,最好的方法依然是换个支持的库
百度搜来搜去发现,其实nodejs 里面的 node-rsa 模块是支持这个需求的。 所以就试试了 ,居然跑通了
npm install node-rsa
main.js 中 引入相关组件
let NodeRSA = require('node-rsa'); Vue.prototype.$nodersa = NodeRSA; 在需要解密的地方这样调用
let data = this.GetUrlParam("data"); // 加密后的数据,base64 编码 let key = new this.$nodersa(this.$global.rsa_pubkey); // 设置你的公钥 console.log(key.decryptPublic(data,"utf-8")); // 解密数据
私钥加密,公钥解密。这种场景应该是签名吧
// Sign with the private key...
var sign = new JSEncrypt();
sign.setPrivateKey($('#privkey').val());
var signature = sign.sign($('#input').val(), CryptoJS.SHA256, "sha256");
// Verify with the public key...
var verify = new JSEncrypt();
verify.setPublicKey($('#pubkey').val());
var verified = verify.verify($('#input').val(), signature, CryptoJS.SHA256);
// Now a simple check to see if the round-trip worked.
if (verified) {
alert('It works!!!');
}
else {
alert('Something went wrong....');
}
正确的做法是: 1.通信的双方各自生成私钥并导出公钥 2.双方交换公钥 3.使用换来的公钥加密 4.密文发给对方 5.对方使用自己的私钥解密,获得原文 注:公钥仅有加密能力,无解密能力
~~……不对啊,要是能凭公钥进行解密,这还能是非对称加密么~~
我想起来了,过程也是可以反过来的,私钥加密,公钥解密,这种过程是做数字签名
为什么不是
发自我的iPhone
------------------ 原始邮件 ------------------ 发件人: 伊欧 @.> 发送时间: 2021年6月30日 12:36 收件人: travist/jsencrypt @.> 抄送: Subscribed @.***> 主题: 回复:[travist/jsencrypt] 不能通过公钥解密 (#168)
……不对啊,要是能凭公钥进行解密,这还能是非对称加密么
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.
私钥加密,公钥解密,是签名啊!!!!!有这个方法的啊!!!各位大哥大姐!!!
……不对啊,要是能凭公钥进行解密,这还能是非对称加密么
~~服了,怎么那么多人搞不清非对称说的是什么。非对称指的:明文和密文之间非对称。和公钥私钥之间对不对称有什么关系,,,,,~~
由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密
正确的做法是: 1.通信的双方各自生成私钥并导出公钥 2.双方交换公钥 3.使用换来的公钥加密 4.密文发给对方 5.对方使用自己的私钥解密,获得原文 注:公钥仅有加密能力,无解密能力
你的注是错的,公钥和私钥均可加密或解密。自己再去学下吧
非对称加密
(引自维基百科)
由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。
请你先确定你的观点已经经过资料验证再来反驳。
(另外,我两年前的评论已经更正,公钥确实有解密能力,这种场景一般称作数字签名)
非对称加密
(引自维基百科)
由于加密和解密需要两个不同的密钥,故被称为非对称加密;不同于加密和解密都使用同一个密钥的对称加密。
请你先确定你的观点已经经过资料验证再来反驳。
(另外,我两年前的评论已经更正,公钥确实有解密能力,这种场景一般称作数字签名)
“由于加密和解密需要两个不同的密钥,故被称为非对称加密”
这点受教了
你两不要再吵加了! 常识: 所谓非对称加密, 公钥私钥都能加解密.区分应用场景: 公钥一般用于加密, 即常见的https原理 私钥用于签名, 用于验证.
这个云泥的说法感觉有点问题, 双方通讯时, 以TLS协议为例, 并 非什么"交换公钥", 而是有一方(忘了哪一方了)生成一个对称密钥, 然后用公钥还是私钥来着, 加密这个对称密钥,然后安全地传递给对方. 然后之后双方通信的内容, 依靠这个对称密钥采用对称算法进行加解密传输.
HRP @.***
私钥加密,公钥解密。这种场景应该是签名吧
// Sign with the private key... var sign = new JSEncrypt(); sign.setPrivateKey($('#privkey').val()); var signature = sign.sign($('#input').val(), CryptoJS.SHA256, "sha256"); // Verify with the public key... var verify = new JSEncrypt(); verify.setPublicKey($('#pubkey').val()); var verified = verify.verify($('#input').val(), signature, CryptoJS.SHA256); // Now a simple check to see if the round-trip worked. if (verified) { alert('It works!!!'); } else { alert('Something went wrong....'); }
这个只是校验吧,无法通过解密获取到 $('#input').val()
的值