美文网首页程序员
WEB如何使用RSA加密数据(公钥加密)

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

作者: HBLong | 来源:发表于2016-02-19 00:35 被阅读2583次

    最近一个项目的登录接口需要加密处理。考虑到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进行测试

    经过测试后,发现终于成了,于是提取关键代码
    <pre>
    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;
    }
    </pre>
    该函数需要引入官方的js库
    <pre>
    jsbn.js
    prng4.js
    rng.js
    rsa.js
    base64.js
    </pre>

    使用时提示缺少函数hex2b64()还需要从官方例子引入该函数
    <pre>
    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;
    }
    </pre>

    另附上RSA and ECC in JavaScript的地址

    相关文章

      网友评论

        本文标题:WEB如何使用RSA加密数据(公钥加密)

        本文链接:https://www.haomeiwen.com/subject/kqzmkttx.html