zoukankan      html  css  js  c++  java
  • nodeJS rsasha加密

    /**
     * Created by Administrator on 2017/4/19.
     */
    var crypto = require('crypto');
    
    //签名
    function signer(algorithm, key, data) {
        key = get_key(key, 1);
        var sign = crypto.createSign(algorithm);
        sign.update(data);
        sig = sign.sign(key, 'base64');
        return sig;
    }
    
    //验证签名
    function verify(algorithm, pubkey, sig, data) {
        pubkey = get_key(pubkey, 0);
        var verify = crypto.createVerify(algorithm);
        verify.update(new Buffer(data, 'utf-8'));
        return verify.verify(pubkey, sig, 'base64');
    }
    
    /**
    *获取PEM格式的秘钥(公钥,私钥)
    *key:待编码的key
    *keyType: 0 公钥 1 私钥
    */
    function get_key(key,keyType) {
        key = insert_str(key, '
    ', 64);
        switch (keyType) {
            case 0:
                key = '-----BEGIN PUBLIC KEY-----
    ' + key + '-----END PUBLIC KEY-----';
                break;
            case 1:
                key = '-----BEGIN PRIVATE KEY-----
    ' + key + '-----END PRIVATE KEY-----';
                break;
        }
        return key;
    }
    
    /**
     * 在指定位置插入字符串
     * @待插入字符串 str
     * @插入字符串 insert_str
     * @位置 sn
     * @returns {string}
     */
    function insert_str(str, insert_str, sn) {
        var newstr = "";
        for (var i = 0; i < str.length; i += sn) {
            var tmp = str.substring(i, i + sn);
            newstr += tmp + insert_str;
        }
        return newstr;
    }
    
    /**
     * RSA-SHA1验证签名
     * @数据 {string} data
     * @公钥 {string} pubkey
     * @签名 {string} sig
     */
    exports.rsasha1verify = function(data,pubkey,sig){
        var algorithm = 'RSA-SHA1';
        return verify(algorithm,pubkey,sig,data);
    }
    
    /**
     * RSA-SHA1签名
     * @加密私钥 {string} key
     * @数据 {string} data
     */
    exports.rsasha1sign = function (key,data) {
        var algorithm = 'RSA-SHA1';
        return signer(algorithm, key, data);
    }
    
    /**
     * RSA-SHA256签名
     * @加密私钥 {string} key
     * @数据 {string} data
     */
    exports.rsasha256sign = function (key ,data) {
        var algorithm = 'RSA-SHA256';
        return signer(algorithm, key, data);
    }
    
    /**
     * RSA-SHA256验证签名
     * @数据 {string} data
     * @公钥 {string} pubkey
     * @签名 {string} sig
     */
    exports.rsasha256verify = function (data, pubkey, sig) {
        var algorithm = 'RSA-SHA256';
        return verify(algorithm, pubkey, sig, data);
    }
    

      个人用 备份

  • 相关阅读:
    Atom | 编辑器Atom的使用小结
    离散数学 | ∅ 与 {∅} 出现在离散数学幂集合中
    Excel | 如何用Excel实现证件照底色调换
    Awesome图标 | 如何在某些编辑软件中使用Font Awesome字体图标
    将SSH的秘钥每次输入的密码去掉
    用canvas 画一个水位波纹上升下降的进度球
    解决Enter passphrase for key '/Users/mac/.ssh/id_rsa':的问题
    vue 注册全局过滤器
    解决vue的父组件打开子组件弹窗只走一次mounted的问题
    forEach终止循环的方法
  • 原文地址:https://www.cnblogs.com/naocanzhishen/p/8778153.html
Copyright © 2011-2022 走看看