gpt4 book ai didi

node.js - 使用node.js crypto来验证签名

转载 作者:行者123 更新时间:2023-12-02 18:34:52 26 4
gpt4 key购买 nike

我正在尝试使用 AWS lambda 来验证在 swift 中使用 sec256r1 创建的签名。

消息:“一些要签名的文本”

也已使用 sha256 进行哈希处理

签名将采用base64格式

encoding:MEYCIQCPfWhpzxMqu3gZWflBm5V0aetgb2/S+SGyGcElaOjgdgIhALaD4lbxVwa8HUUBFOLz+CGvIioDkf9oihSnXHCqh8yV

公钥将如下所示:

-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXIvPbzLjaPLd8jgiv1TL/X8PXpJN
gDkGRj9U9Lcx1yKURpQFVavcMkfWyO8r7JlZNMax0JKfLZUM1IePRjHlFw==
-----END PUBLIC KEY-----

澄清一下,

我正在尝试使用 lambda 来验证来自客户端的签名,并在需要时使用其公钥加密数据。

这里是代码:

    const crypto = require('crypto');
const verify = crypto.createVerify('SHA256');

verify.write('some text to sign');
verify.end();

const l1 = "-----BEGIN PUBLIC KEY-----\n"
const l2 =
"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXIvPbzLjaPLd8jgiv1TL/X8PXpJNgDkGRj9U9Lcx1yKURpQFVavcMkfWyO8r7JlZNMax0JKfLZUM1IePRjHlFw=="

const l3 = "\n-----END PUBLIC KEY-----"

const publicKey = l1 + l2 + l3

const signature = "MEYCIQCPfWhpzxMqu3gZWflBm5V0aetgb2/S+SGyGcElaOjgdgIhALaD4lbxVwa8HUUBFOLz+CGvIioDkf9oihSnXHCqh8yV";

console.log(verify.verify(publicKey, signature));// Prints: true or false

最佳答案

以下是如何与 Nodejs.Crypto 集成。一、RSA需要生成私钥和公钥。有多种方法可以做到这一点,这是一种方法 online with encrypt.JS 。在将私钥和公钥存储到文件系统中后,您可以使用下面的 getSignatureByInput 函数,该函数根据字符串输入生成唯一的签名:

const crypto = require('crypto')
const fs = require('fs')

const getSignatureByInput = (input) => {
let privatePem = fs.readFileSync('PRIVATE_KEY_FILE_PATH_GOES_HERE')
let key = privatePem.toString('ascii')
let sign = crypto.createSign('RSA-SHA256')
sign.update(input)
let signature = sign.sign(key, 'hex')

return signature
}

此后,至verify a signature ,您可以使用以下功能:

const getSignatureVerifyResult = (input) => {
let signatureSignedByPrivateKey = getSignatureByInput(input)

let pem = fs.readFileSync('PUBLIC_KEY_FILE_PATH_GOES_HERE')
let publicKey = pem.toString('ascii')
const verifier = crypto.createVerify('RSA-SHA256')

verifier.update(input, 'ascii')

const publicKeyBuf = new Buffer(publicKey, 'ascii')
const signatureBuf = new Buffer(signatureSignedByPrivateKey, 'hex')
const result = verifier.verify(publicKeyBuf, signatureBuf)

return result;
}

getSignatureVerifyResult 将根据签名是否验证返回 true/false。请记住,有一个 plethora of algorithms to choose说到签名。

关于node.js - 使用node.js crypto来验证签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48611041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com