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);
    }
    

      个人用 备份

  • 相关阅读:
    UVA 12657 Boxes in a Line 双向链表模拟
    C语言单片和C#语言服务器端DES及3DES加密的实现
    关于TcpClient,Socket连接超时的几种处理方法
    拿来参考的学习计划
    faire la course
    今日法语2
    炸鱼
    今日法语
    今日疑问
    下周想做的菜
  • 原文地址:https://www.cnblogs.com/naocanzhishen/p/8778153.html
Copyright © 2011-2022 走看看