无法使用密钥对validationNode.js Crypto的签名
我在nodejs中有一个非常小的代码,在其中我签署了一个string,然后尝试使用openssl生成的节点密码和密钥对来validation它。 无论我尝试什么,结果总是“假”,签名无法validation。
生成公钥/私钥对:
openssl genrsa -out rsa_1024_priv.pem 1024 openssl rsa -in rsa_1024_priv.pem -out rsa_1024_pub.pem -outform PEM -pubout
结果键是(我不在意让他们公开):
-----BEGIN RSA PRIVATE KEY----- MIICXQIBAAKBgQDCtTEic76GBqUetJ1XXrrWZcxd8vJr2raWRqBjbGpSzLqa3YLv VxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSupolzZrwMFSylxGwR5jPmoNHDM S3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPMt4KUcQ1TaazB8TzhqwIDAQAB AoGAM8WeBP0lwdluelWoKJ0lrPBwgOKilw8W0aqB5y3ir5WEYL1ZnW5YXivS+l2s tNELrEdapSbE9hieNBCvKMViABQXj4DRw5Dgpfz6Hc8XIzoEl68DtxL313EyouZD jOiOGWW5UTBatLh05Fa5rh0FbZn8GsHrA6nhz4Fg2zGzpyECQQDi8rN6qhjEk5If +fOBT+kjHZ/SLrH6OIeAJ+RYstjOfS0bWiM9Wvrhtr7DZkIUA5JNsmeANUGlCrQ2 cBJU2cJJAkEA26HyehCmnCkCjit7s8g3MdT0ys5WvrAFO6z3+kCbCAsGS+34EgnF yz8dDdfUYP410R5+9Cs/RkYesqindsvEUwJBALCmQVXFeKnqQ99n60ZIMSwILxKn Dhm6Tp5Obssryt5PSQD1VGC5pHZ0jGAEBIMXlJWtvCprScFxZ3zIFzy8kyECQQDB lUhHVo3DblIWRTVPDNW5Ul5AswW6JSM3qgkXxgHfYPg3zJOuMnbn4cUWAnnq06VT oHF9fPDUW9GK3yRbjNaJAkAB2Al6yY0KUhYLtWoEpQ40HlATbhNel2cn5WNs6Y5F 2hedvWdhS/zLzbtbSlOegp00d2/7IBghAfjAc3DE9DZw -----END RSA PRIVATE KEY----- -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCtTEic76GBqUetJ1XXrrWZcxd 8vJr2raWRqBjbGpSzLqa3YLvVxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSup olzZrwMFSylxGwR5jPmoNHDMS3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPM t4KUcQ1TaazB8TzhqwIDAQAB -----END PUBLIC KEY-----
那么,这是我的节点代码:
var crypto = require('crypto'); var privateKey = '-----BEGIN RSA PRIVATE KEY-----\n'+ 'MIICXQIBAAKBgQDCtTEic76GBqUetJ1XXrrWZcxd8vJr2raWRqBjbGpSzLqa3YLv\n'+ 'VxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSupolzZrwMFSylxGwR5jPmoNHDM\n'+ 'S3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPMt4KUcQ1TaazB8TzhqwIDAQAB\n'+ 'AoGAM8WeBP0lwdluelWoKJ0lrPBwgOKilw8W0aqB5y3ir5WEYL1ZnW5YXivS+l2s\n'+ 'tNELrEdapSbE9hieNBCvKMViABQXj4DRw5Dgpfz6Hc8XIzoEl68DtxL313EyouZD\n'+ 'jOiOGWW5UTBatLh05Fa5rh0FbZn8GsHrA6nhz4Fg2zGzpyECQQDi8rN6qhjEk5If\n'+ '+fOBT+kjHZ/SLrH6OIeAJ+RYstjOfS0bWiM9Wvrhtr7DZkIUA5JNsmeANUGlCrQ2\n'+ 'cBJU2cJJAkEA26HyehCmnCkCjit7s8g3MdT0ys5WvrAFO6z3+kCbCAsGS+34EgnF\n'+ 'yz8dDdfUYP410R5+9Cs/RkYesqindsvEUwJBALCmQVXFeKnqQ99n60ZIMSwILxKn\n'+ 'Dhm6Tp5Obssryt5PSQD1VGC5pHZ0jGAEBIMXlJWtvCprScFxZ3zIFzy8kyECQQDB\n'+ 'lUhHVo3DblIWRTVPDNW5Ul5AswW6JSM3qgkXxgHfYPg3zJOuMnbn4cUWAnnq06VT\n'+ 'oHF9fPDUW9GK3yRbjNaJAkAB2Al6yY0KUhYLtWoEpQ40HlATbhNel2cn5WNs6Y5F\n'+ '2hedvWdhS/zLzbtbSlOegp00d2/7IBghAfjAc3DE9DZw\n'+ '-----END RSA PRIVATE KEY-----'; var publicKey = '-----BEGIN PUBLIC KEY-----\n'+ 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCtTEic76GBqUetJ1XXrrWZcxd\n'+ '8vJr2raWRqBjbGpSzLqa3YLvVxVeK49iSlI+5uLX/2WFJdhKAWoqO+03oH4TDSup\n'+ 'olzZrwMFSylxGwR5jPmoNHDMS3nnzUkBtdr3NCfq1C34fQV0iUGdlPtJaiiTBQPM\n'+ 't4KUcQ1TaazB8TzhqwIDAQAB\n'+ '-----END PUBLIC KEY-----'; var signer = crypto.createSign('sha256'); signer.update('hola'); var sign = signer.sign(privateKey,'base64'); var verifier = crypto.createVerify('sha256'); verifier.update(sign); var ver = verifier.verify(publicKey, sign,'base64'); console.log(ver);//<--- always false!
我试过使用不同的algorithm和编码。 我用“fs”读了PEM文件,也没有运气。 我错过了什么? 顺便说一句,这些键完美地使用npm URSA模块,所以我知道键是好的(不能在我的项目中使用ursa)。 谢谢!
您需要validation您签署的相同数据: verifier.update(sign);
应该是verifier.update('hola');
- 使用RC4的NodeJS Crypto产生空白
- PassportJS – 在将有效载荷数据传递给passport.authenticate作为请求参数之前获取
- AES CryptoJSencryption和phpseclib解密
- 在NodeJS,Crypto令牌authentication环境中生成独特的令牌
- CryptoJs不能解密我的NodeJS服务器上的URL
- Rfc2898DeriveBytes在javascript中的等价物?
- 如何解密CryptoJS中的AES 128(nodejs / web浏览器)
- Node.js和Mongodb安全+encryption选项的源代码
- Javascriptencryption库不能encryption和解密一个简单的例子程序中的string