Nodejs进行RSA签名(SHA256withRSA)

最近在做开放平台项目,在编写SDK的时候用到签名验签功能,采用Sha256WithRSA签名,具体流程是使用私钥生成签名,然后公钥进行验签。

现在把私钥签名的代码分享出来。

package.json添加依赖:

"dependencies": {
    // 加密库
    "jsrsasign": "^8.0.19",
  }

完整代码:

const {KJUR, hextob64} = require('jsrsasign')

const HashMap = {
    SHA256withRSA: 'SHA256withRSA',
    SHA1withRSA: 'SHA1withRSA'
}

const PEM_BEGIN = '-----BEGIN PRIVATE KEY-----\n'
const PEM_END = '\n-----END PRIVATE KEY-----'

/**
 * rsa签名参考:https://www.jianshu.com/p/145eab95322c
 */
exports.SignUtil = {
    /**
     * rsa签名
     * @param content 签名内容
     * @param privateKey 私钥,PKCS#1
     * @param hash hash算法,SHA256withRSA,SHA1withRSA
     * @returns 返回签名字符串,base64
     */
    rsaSign: function (content, privateKey, hash) {
        privateKey = this._formatKey(privateKey)
        // 创建 Signature 对象
        const signature = new KJUR.crypto.Signature({
            alg: hash,
            //!这里指定 私钥 pem!
            prvkeypem: privateKey
        })
        signature.updateString(content)
        const signData = signature.sign()
        // 将内容转成base64
        return hextob64(signData)
    },
    _formatKey: function (key) {
        if (!key.startsWith(PEM_BEGIN)) {
            key = PEM_BEGIN + key
        }
        if (!key.endsWith(PEM_END)) {
            key = key + PEM_END
        }
        return key
    }
}

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值