JS RSA 公钥解密

需求

后台使用私钥加密数据,然后前端使用公钥解密,也不知道怎么搞出来的这种需求,感觉很不符合逻辑。我对RSA的理解为:公钥负责加密,私钥负责解密。签名的话,私钥负责签名,公钥负责验证。例如:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我发消息,只有我才能发布这个签名,所以可得出私钥负责签名,公钥负责验证。

参考

实现

1. 修改 RSAKey.prototype.decrypt 中 this.doPrivate(c) 为 this.doPublic(c);

RSAKey.prototype.decrypt = function (ctext) {

var c = parseBigInt(ctext, 16);

var m = this.doPublic(c);

//var m = this.doPrivate(c);

if (m == null) {

return null;

}

return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);

};

2. 修改 pkcs1unpad2

function pkcs1unpad2(d, n) {

var b = d.toByteArray();

var i = 0;

while (i < b.length && b[i] == 0) {

++i;

}

//注释即可

// if (b.length - i != n - 1 || b[i] != 2) {

// return null;

// }

++i;

while (b[i] != 0) {

if (++i >= b.length) {

return null;

}

}

var ret = "";

while (++i < b.length) {

var c = b[i] & 255;

if (c < 128) { // utf-8 decode

ret += String.fromCharCode(c);

} else if ((c > 191) && (c < 224)) {

ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));

++i;

} else {

ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));

i += 2;

}

}

return ret;

}

3. 调用

var verify = new JSEncrypt();

//替换为公钥,格式为:-----BEGIN PUBLIC KEY----- 公钥 -----END PUBLIC KEY-----

verify.setPublicKey($('#pubkey').val());

//使用私钥加密后的数据

var verified = verify.decrypt("Y/f5VqHyS6+9uVZIQLRFbLtNNvnYnrEOFRMCg0FmeojihSILNyrIerh5zYoVbRm9S16K65shz1VW5s/qQxk4hDmQ/cDo3yNdGhzS62XWN9f6rNIRk4pANSqrlt+3/kgooGlPcVRWGuNM2wX2WOJw0OgelZfFIbu0dIHlP8ohZ7w=");

console.log('解密后数据:', verified);

源码

js java rsa 解密,JS RSA 公钥解密相关推荐

  1. c rsa java私钥_RSA,JAVA私钥加密,C#公钥解密

    做这个东西在坑里爬了3天才爬出来,记录下供园友参考.C#程序员一枚,项目需要和Java做数据交互,对方甩了段密文和一个CER证书给我,然后我要对其密文进行解密. RSA 非对称加密,对方用私钥加密,我 ...

  2. RSA用私钥加密数据公钥解密数据(不是签名验证过程)

    RSA用私钥加密数据公钥解密数据,严格的来说,并不安全.但是最近在写一个keygen的时候,软件作者是这么用的,所以只能搞一个这样的. 常规自带的一些rsa密码utils里面并没有这种功能.只有封装好 ...

  3. iOS中使用基于RSA使用公钥加密和公钥解密

    前言 最近在公司项目中被要求使用RSA加密,且要求是全程加解密,期间也是踩了很多的坑,在此做个记录也算给要使用的朋友一点帮助.注意,具体的RSA加密算法内容并不在此文的讨论范围之内.本文更多聚焦于使用 ...

  4. 公钥加密私钥解密私钥加密公钥解密

    公钥加密体制 1.公钥加密体制用于保密性时,就是公钥加密,私钥解密. 因为公钥是可以公开了, 那么任何人都可以使用公钥对信息进行加密,但是只有持有私钥的人才能正确解密.这样就保证了信息的保密性,因为只 ...

  5. Java使用RSA的公钥加密,私钥解密;私钥加密,公钥解密

    Java使用RSA的公钥加密,私钥解密:私钥加密,公钥解密 import lombok.extern.slf4j.Slf4j; import org.apache.commons.codec.bina ...

  6. 分享一个RSA加解密工具类,公钥加密私钥解密、私钥加密公钥解密、私钥签名公钥验签、生成公钥私钥

    测试: public static void main(String[] args) {try {//生成公钥私钥Map<String, Object> map = RSAUtil.ini ...

  7. ios php rsa加密解密,php rsa加密解密使用详解

    第一条命令生成原始 RSA私钥文件 rsa_private_key.pem,第二条命令将原始 RSA私钥转换为 pkcs8格式,第三条生成RSA公钥 rsa_public_key.pem 从上面看出通 ...

  8. RSA-公钥加密,私钥解密 、私钥加密,公钥解密、私钥加签,公钥验签

    https://blog.csdn.net/qq_31289187/article/details/85234044 一.案例内容: RSA 公钥加密,私钥解密:     RSA 私钥加密,公钥解密: ...

  9. cryptico.js java解密_從Cryptico.js中提取RSA私鑰

    我相信這是一個非常基本的問題,但我開始使用JavaScript和RSA進行研究,所以我有點失落.我剛剛下載了Cryptico庫,它爲我提供了一個易於使用的RSA密鑰生成/加密/解密.從Cryptico ...

最新文章

  1. python3 的 round 函数的 练习
  2. python学习使用
  3. 金蝶 K/3 Cloud 服务端控件编程模型
  4. maven snapshot和release版本号之间的差
  5. 关于流(文件)的输入,输出与调用(fprintf,fscanf)
  6. warpctc error
  7. php js后端渲染,webpack后端渲染详解
  8. linux iops 监控,企业级监控软件使用zabbix key 监控IOPS状态
  9. HDU 1251 统计难题 (Trie)
  10. 中南大学2021计算机专硕复试分数线,中南大学2021年考研复试分数线
  11. Unity与Android通信交互
  12. 在线支付系列【4】支付安全之数字签名
  13. Docker 容器技术初探
  14. 使用URL作为API接口获取taobao pdd 1688商品详情等相关数据
  15. 2023年大厂高频软件测试面试题:Web 测试 + 接口测试 +App 测试
  16. RandomAccessFile、FileChannel和MappedByteBuffer
  17. 【汇正财经】沪深创缩量调整
  18. CTF密码学总结(二)
  19. matlab差速器建模仿真,matlab 两轮差速模型运动模型公式和运动轨迹模拟
  20. 如何用Astra主题免费版建外贸网站

热门文章

  1. powershell使用xming远程图形化linux安装软件
  2. javascript运动系列第八篇——碰壁运动
  3. 外挂屡次作怪,反外挂如何奇招百出?
  4. Vue Router路由管理器
  5. 几种开源SIP协议栈对比
  6. 借场雪吧~ js下雪动画 canvas画布实现下雪特效
  7. 网易收购锤子的可能与不可能(老罗已辟谣)
  8. Carson带你学Android:全面解析Android消息推送解决方案
  9. 小学人教版英语教案二-Leo老师
  10. 计算机专业好还是铁道运输管理好,铁道运输管理专业就业前景好原因公布!