我正在尝试使用AWS来验证在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发布于 2018-02-05 07:41:29
请参阅this StackOverflow post上更完整的解决方案,其中展示了如何在node.js中使用verify.update()和verify.verify()方法。
发布于 2019-02-15 10:25:18
下面是如何与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。
https://stackoverflow.com/questions/48611041
复制相似问题