用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 ...
随机推荐
- python数据结构之二叉树遍历的实现
本篇是实现二叉树的三种遍历,先序遍历,中序遍历,后序遍历 #!/usr/bin/python # -*- coding: utf-8 -*- class TreeNode(object): def _ ...
- redmine v3.02版的安装问题
redmine v3.0.2版的安装问题 参考上次在朋友公司的云主机上安装的过程: 1. 下载 2. gem install bundler 3. bundle install 出现 rmagick ...
- [转载]BW增量更新的理解(时间戳)
在BW中,存在两种数据抽取方式,完全更新与增量更新,完全更新是每次把截至到某个时间的数据全部抽取,增量抽取则只抽取上次和本次抽取之间更新的数据,很显然,增量抽取能够提高系统效率,根据SAP帮 助的说法 ...
- 关于Unity程序在IOS和Android上显示内嵌网页的方式
近期因为有须要在Unity程序执行在ios或android手机上显示内嵌网页.所以遍从网上搜集了一下相关的资料.整理例如以下: UnityWebCore 从搜索中先看到了这个.下载下来了以后发现这个的 ...
- C#集合-列举(Enumeration)
在计算机这个范畴内存在许多种类的集合,从简单的数据结构比如数组.链表,到复杂的数据结构比如红黑树,哈希表.尽管这些数据结构的内部实现和外部特征大相径庭,但是遍历集合的内容确是一个共同的需求..NET ...
- MiniCrowler
MiniCrawler Github Path : https://github.com/LixinZhang/miniCrowler Introduction: MiniCrawler is a s ...
- Python--类-例子
class Base: def __init__(self): self.data = [] def add(self, x): self.data.append(x) def addtwice(se ...
- [转]C++学习–基础篇(书籍推荐及分享)
C++入门 语言技巧,性能优化 底层硬货 STL Boost 设计模式 算法篇 算起来,用C++已经有七八年时间,也有点可以分享的东西: 以下推荐的书籍大多有电子版.对于技术类书籍,电子版并不会带来一 ...
- 关于Linux session管理与GUI架构
google了一下感觉一下子找不到太好的资料,可能需要慢慢深入去学习. 这里有一个讲session management的,还算比较深入: https://dvdhrm.wordpress.com/2 ...
- 免费国内外"代码托管服务器"收集
国内 开源中国 http://git.oschina.net/ 支持git 淘宝code http://code.taobao.org/ 支持svn 京东code https://cod ...