用cryptico.js实现RSA加密(应对cryptico不支持PEM)
问题:
随手分享一下好了,这个问题困扰了很久。
cryptico.js这个加密算法库很全,很适合在前端用到各种加密解密算法的需求。但是美中不足的是,它的RSA加密不支持PEM格式,所以如果你后端用java或者python生成的公钥不能直接用PEM的base64格式传给前端进行加密。
解决办法:
解决办法就是在后端提取出来n和e这两个数,转成16进制之后传给前端,然后人为修改cryptico的两个函数:
var publicKeyFromString = function (string) {
var tokens = string.split("|");
var N = tokens[0];
console.log(N);
var E = tokens.length > 1 ? tokens[1] : "03";
var rsa = new RSAKey();
rsa.setPublic(N, E);
return rsa
};
cryptico.encrypt = function (plaintext, publickeystring, signingkey) {
var cipherblock = "";
try {
var publickey = publicKeyFromString(publickeystring);
cipherblock += cryptico.b16to64(publickey.encrypt(plaintext));
}
catch (err) {
return {status: "Invalid public key"+" "+err};
}
return {status: "success", cipher: cipherblock};
};
使用的时候这样使用:将n和e用|分隔作为publicKeyString
var publicKey = "{{n}}|{{e}}";
var encrypted = cryptico.encrypt("plaintext", publicKey);
console.log(encrypted.cipher);`
后话:
当然了,这里的encrypt函数修改的有点太粗暴了,还漏了signingkey参数处理的部分,读者自己参考cryptico.js源码改吧!
参考链接:
cryptico.js Github开源地址:
https://github.com/wwwtyro/cryptico
StackOverflow 解决方法:
http://stackoverflow.com/questions/16505963/encrypt-with-cryptico-js-decrypt-with-openssl
我的博客:
http://blog.zhusun.in
用cryptico.js实现RSA加密(应对cryptico不支持PEM)的更多相关文章
- Python3 实现 JS 中 RSA 加密的 NoPadding 模式
前因后果之哗啦啦废话连篇: 这几天本人在 Python 做某网站登陆的时候,发现其登陆时用户名和密码被加密了 F12 仔细看了一下,发现是调用了一个 js 的 rsa 加密库,页面 dom 中有 rs ...
- JS 使用RSA加密解密
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>使 ...
- JS客户端RSA加密,Java服务端解密
常用语网页客户端对密码加密,在后端java解密还原 java代码依赖 <dependency> <groupId>commons-codec</group ...
- Js参数RSA加密传输,jsencrypt.js的使用
注意几点: 1.参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了. 1.前段代码 <!DOCTYPE html> <html> <head> < ...
- 利用security.js实现RSA加密
在通常的http协议的网站中直接提交数据可以通过信息抓取从而暴露提交者所提交的信息,特别是注册时的密码和登录时的密码容易被泄露. 那么怎么防止这种现象呢? 很多人会想到加密技术,对没错,本文所讲的就是 ...
- rsa加密解密pfx证书转pem文件
openssl 转化文件命令X509转PFX:openssl pkcs12 -export -inkey test.key -in test.cer -out test.pfxPFX转X509:ope ...
- React Native + Nodejs 使用RSA加密登录
想用rn做个RSA(非对称加密)登录 基本流程就是在服务端生成RSA后,将“公钥”发到客户端,然后客户端用“公钥”加密信息发送到服务端,服务务端用私钥解密. 过程不复杂,问题在于,nodejs和rn都 ...
- vue实现rsa加密,数字签名,md5加密等
一.使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客 *(原文处有一个地方不对,不需要转换+,rsa已经做过base64转码了) ...
- vue使用JSEncrypt实现rsa加密及挂载方法
挂载全局方法 使用jsencrypt进行rsa加密 原文链接:Js参数RSA加密传输,jsencrypt.js的使用 - CSDN博客* https://blog.csdn.net/p31201115 ...
随机推荐
- AngularJS指令嵌套时link函数执行顺序的问题
今天研究指令嵌套时,发现子指令的link函数先于父指令的link函数执行. 这样和预想的顺序不一样. 也就是说,如果子指令的某个scope变量依赖于父指令传来的参数时,可能一直是undefinded比 ...
- [算法导论]强连通分量 @ Python
class Graph: def __init__(self): self.V = [] class Vertex: def __init__(self, x): self.key = x self. ...
- 辅助写作软件:PPT写作助手 帮助创作多图少字文章
读图时代,应该创作“多图少文”的文章. PPT是制作图形最佳工具之一.将“PPT + 文字说明” 结合, 是PPT写作助手开启的全新创作方式,让图文文章更方便创作. PPT写作助手帮助您:1. 方便进 ...
- Ext4,Ext3的特点和区别(转)
Linux kernel 自 2.6.28 开始正式支持新的文件系统 Ext4. Ext4 是 Ext3 的改进版,修改了 Ext3 中部分重要的数据结构,而不仅仅像 Ext3 对 Ext2 那样,只 ...
- 高吞吐量的分布式发布订阅消息系统Kafka-- 管理工具 Kafka Manager
一.概述 Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽. 为了简化开发者和服务工程师维护Kafka集群的工作,构建了一个叫做Kafk ...
- C# 用代码创建 DataSet 和 DataTable 的列和记录
System.Data.DataSet objSet = new DataSet(); System.Data.DataTable objTable = new DataTable("tes ...
- jQuery插件:模拟select下拉菜单
没搞那么复杂,工作中,基本够用.. <!doctype html> <html> <head> <meta charset="utf-8" ...
- Domain Space
Bluehost Register Page http://www.bluehost.com/track/weipengp
- 超微 X9DRL-iF 服务器主板简介 BIOS相关图解
超微 X9DRL-iF 服务器主板简介 BIOS相关图解 板载串口阵列相关简介 网烁信息805 发布时间:2012-6-15 21:10:09 浏览数:2745 随着Intel E5至强的 ...
- 跟随标准与Webkit源码探究DOM -- 获取元素之querySelector,querySelectorAll
使用CSS选择器获取元素 -- querySelector,querySelectorAll(HTML5) 标准 W3C Selector API Level 1为Document,DocumentF ...