Javascript 节点中的SHA256withRSA签名验证每次返回false
我正在尝试按照下面链接上的说明验证添加到XML中的签名。它返回错误。我也用Java编写了一些代码,但我更喜欢NodeJS。也欢迎任何其他模块建议 验证签名的步骤:Javascript 节点中的SHA256withRSA签名验证每次返回false,javascript,node.js,rsa,sha256,cryptojs,Javascript,Node.js,Rsa,Sha256,Cryptojs,我正在尝试按照下面链接上的说明验证添加到XML中的签名。它返回错误。我也用Java编写了一些代码,但我更喜欢NodeJS。也欢迎任何其他模块建议 验证签名的步骤: 读取整个XML并将s=“xxxx”标记与之分离 使用基于“SHA256withRSA”的哈希和加密技术的签名验证算法 “s”标记中的签名值、剩余的XML(不带“s”标记)和UIDAI公钥(此处可用)将提供给算法以验证数字签名 这里提供的示例代码片段 请在下面找到我的代码:[使用NodeJS加密模块] var crypto=requ
var crypto=require('crypto');
设fs=require('fs');
常量证书='----开始证书------\n'+
'miidhtccam2gawibagieyhpgkjanbgkqhkig9w0baqsfadbrmqswcqydvqgewjj\n'+
'TJESMBAGA1ECBMJS2FYBMF0YWTHMRIYDVQHEWLCYW5NYWXVCMUXEDAOBGNV\n'+
'Baotb2HJBC1HJXEDAOBGNVBASTB2HJBC1HDWEXEDAOBGNVBAMTb2HJBC1HDWEW\n'+
'HHCNMTGWMTAZMTYNTQ5WHCNMTKWMTAZMTYNTQ5WJBRMQSWCQYDVQGEWJJTJES\n'+
'mbaga1uecbmjs2fybmf0ywthriweaydvqhewlcyw5nywxvcmuxedaobgnvbaot\n'+
'B2hjbC1hdWExEDAOBgNVBAsTB2hjbC1hdWExEDAOBgNVBAMTB2hjbC1hdWEwggEi\n'+
'MA0GCSQGSIB3DQEBAQAA4IBDWAWGGEKAOIBAQCBGQBR8WRK6QBTUSQ6YVXENY22\n'+
'wr9mW62qVXpaWLVHYcbuVtBALf5LXFK3WnLAY15xKKQ9m9WZa8w2ZMpo20UePoLM\n'+
“QSda0Gk4gFhe0Dl+CZLNSLMLYC4QWRPRPULFTI7KZKDLKKQKPQJACY/OKqUVYj\n”+
'98IPsbp/IIVPSVKWIAS3J1cyornycdtdlhpabux0rcrjxl3245bcj/3jbtpQ+F\n'+
“7Cc81sBVYT31b+L04G3H5IH3HSFG24XRJES1WGLSBZBNABFNSE2JMFNLUIIKZJZ\n”+
“RfcQ5MZgU2/mGjlgGrLV/GX+8YQ0VRRYWEMTNDB0SKGKY3ZQAFGOHA0VXG9AGMB\n”+
“AAGjMTAvMA4GA1UdDwEB/wqeawighdabgnvhq4efgquagx6xg6phyay6cjaip\n”+
'lBHT5S8wDQYJKoZIhvcNAQELBQADggEBAG1z3DQoXjo9u+qfflnymfvvcwrcc+vQ1\n'+
‘xE/5n85G5Gl6PD1fw0HSOOEMbt2obx/L367UVX0+bSi0eG7lFADSfL9G5B+RN+wP\n’+
'0ItLNoG8uc9F0SbQMUw21WLEnkQydjjg+7WP4XPXYETARNYULJUS7UBU/xnHTf6W\n'+
“LTI9NGHER1W69H9D17KIQSFBEGJG0QFH9CGHKT2Q0ETKWQSPI3FWCX3Z4AMS2NZ\n”+
'tog4WzWZlOMLHoPeYsFGv4gTgzbRWX0jc6HZ0057TDo+XWErcSuxBSGX8jEGLfp2\n'+
'tW4LOAE3autC9HsG4OQBiR+NEBMEHBM3PV8ServfgTv6P6QQQIICEMAI=\n'+
'----结束证书------\n';
验证器=crypto.createVerify('sha256withrsacryption');
验证人更新(“”)//不带S属性的XML
常量签名=2.vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvJOS5W8JUVJW37G=="; //S属性的值
var结果=验证人。验证(证书、签名);
console.log(结果,'result');//**它总是返回false**代码>似乎示例代码中的证书与要使用的证书不同。尝试使用我在您共享的URL中找到的以下证书
此外,示例数据似乎无效。我用证书在Live data XML(此处无法共享)上试用了它。经过两次更改后,返回的结果为真:
删除s
元素后,需要从XML中删除一个额外的空间
使用base64解码将签名作为缓冲区传递
const签名=新缓冲区(2.在中国,一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的六六六个中国的一个中国的一个中国的一个中国的一个中国的中国的6个中国的6个中国的一个中国的6个中国的中国的6个中国的一个中国的一个中国的6个中国的6个中国的6个中国的6个中国的一个中国的6个中国的6个中国的6个中国的6个中国的中国的6个中国的中国的中国的TMAQDDU6GH74P734UPJK5CIOUUNW==“,‘base64’”代码>
链接上提供了要验证的示例数据