WEB如何使用RSA加密数据(公钥加密)

最近一个项目的登录接口需要加密处理。考虑到HTTPS环境搭建以及后期各种维护和效率等因素,想要采用非对称加密RSA与对称加密算法AES相结合的方案。由于RSA加密数据量有限,而且速度相对较慢,因此用AES来加密数据,用RSA来传递AES密钥。
因为开发的是WebAPP,于是需要找一个RSA算法JS库。试了各种例子,忙活了一整天,还是没成功实现。最后找到了RSAjs,终于实现了功能。现在记录一下使用方法。
1.使用opensll工具生成私钥,并获取e:
OpenSSL> genrsa -out rsa_private_key.pem 1024

2.使用opensll工具从私钥中提取Modulus
rsa -in rsa_private_key.pem -noout -modulus


3.使用官方提供的demo进行测试

经过测试后,发现终于成了,于是提取关键代码

function do_encrypt(modulus, data) {
    var value = "";
    var rsa = new RSAKey();
    rsa.setPublic(modulus, "10001");
    var res = rsa.encrypt(data);
    if(res) {
        value = linebrk(hex2b64(res), 64);
    }
    return value;
}

该函数需要引入官方的js库

jsbn.js
prng4.js
rng.js
rsa.js
base64.js

使用时提示缺少函数hex2b64()还需要从官方例子引入该函数

function hex2b64(h) {
     var b64map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var b64padchar="=";
    var i;
    var c;
    var ret = "";
    for(i = 0; i+3 <= h.length; i+=3) {
        c = parseInt(h.substring(i,i+3),16);
        ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);
    }
    if(i+1 == h.length) {
        c = parseInt(h.substring(i,i+1),16);
        ret += b64map.charAt(c << 2);
    }
    else if(i+2 == h.length) {
        c = parseInt(h.substring(i,i+2),16);
        ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);
    }
    while((ret.length & 3) > 0) ret += b64padchar;
    return ret;
}

另附上RSA and ECC in JavaScript的地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • /**ios常见的几种加密方法: 普通的加密方法是讲密码进行加密后保存到用户偏好设置( [NSUserDefaul...
    彬至睢阳阅读 3,053评论 0 7
  • 1.数据安全 01 攻城利器:Charles(公司中一般都使用该工具来抓包,并做网络测试) 注意:Charles在...
    Lucky丶晴阅读 1,493评论 0 9
  • “教练,给我报上名。”我独自来到~~宝通驾校,找到李教练说道,“不交钱没有练车的动力,交了钱就自己督促自己...
    走过不惑阅读 884评论 3 4
  • 产假休完之后,选择继续上班,这是一段艰难的历程,现在正犹豫不决中度过。 宝宝五个月时候,就回到了工作岗位,因为在公...
    赵淇淇阅读 283评论 0 0
  • 转载自《Swift 语言指南》 @SwiftLanguage 更新于 2016-6-6,更新内容详见 Issue ...
    温特儿阅读 1,081评论 0 1