用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 ...
随机推荐
- db2 中文表名和字段
建库语句 create db test on D: using codeset GBK territory CN 或者 territory cn codeset 和 territory 都是需要指定 ...
- 如何在C语言中调用Swift函数
在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...
- SSH乱码解决
解决方案: 使用linux,在用户根目录(/root)下有一个.bash_profile配置文件,该配置只对当前用户有效. 使用ls -a命令可以查看到该文件.使用vi编辑器打开该文件后,在其中加入 ...
- 【Cocos2d-Js基础教学(7)界面UI更新方法(会用到第三方类库)】
我们游戏中会遇到很多UI更新的时候,大部分时候我们会remove该节点,再重新绘制的方法来进行UI更新. 但是这种更新效率并不高,这里我推荐大家一个第三方的库,来通过注册更新的方式来对UI进行更新管理 ...
- ubuntu-15.10-server-i386.iso 安装 Oracle 11gR2 数据库
注意: ld的版本为 2.25.1,gcc版本为gcc-5 特点: 需要重新安装老版本的 libaio1_0.3.109-2ubuntu?_i386.deb.默认的libaio库有问题,和其默认lib ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- LoadRunner11.52发布,全新的VTS
LoadRunner11.52发布,全新的VTShttp://automationqa.com/forum.php?mod=viewthread&tid=2252&fromuid=2 ...
- 树莓派保卫战--防止SSH暴力破解
自己用树莓派搭建了个小server,用了很长时间了,最近查看log发现有很多SSH登陆失败,瞬间心就碎了,一直没关心小派的安全问题,怪我咯! 马上行动,首先研究下log:/var/log/auth.l ...
- MediaPlayer 播放assets 文件夹下面的视频报错
Android MediaPlayer 播放assets 文件夹下面的视频报错 报下面的错: java.io.FileNotFoundException: This file can not be o ...
- ASP.NET MVC 的自定义模型属性别名绑定
最近在研究 ASP.NET MVC 模型绑定,发现 DefaultModelBinder 有一个弊端,就是无法实现对浏览器请求参数的自定义,最初的想法是想为实体模型的属性设置特性(Attribute) ...