Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点中的SHA256withRSA签名验证每次返回false_Javascript_Node.js_Rsa_Sha256_Cryptojs - Fatal编程技术网

Javascript 节点中的SHA256withRSA签名验证每次返回false

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

我正在尝试按照下面链接上的说明验证添加到XML中的签名。它返回错误。我也用Java编写了一些代码,但我更喜欢NodeJS。也欢迎任何其他模块建议

验证签名的步骤:

  • 读取整个XML并将s=“xxxx”标记与之分离

  • 使用基于“SHA256withRSA”的哈希和加密技术的签名验证算法

  • “s”标记中的签名值、剩余的XML(不带“s”标记)和UIDAI公钥(此处可用)将提供给算法以验证数字签名

  • 这里提供的示例代码片段

  • 请在下面找到我的代码:[使用NodeJS加密模块]

    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’”


  • 链接上提供了要验证的示例数据