【问题标题】:Sha1 sign Nodejs from xmlSha1从xml签署Nodejs
【发布时间】:2020-12-02 01:23:36
【问题描述】:

我在 .net 中有一个方法,我想从 Nodejs 获得相同的输出。该代码负责使用私钥创建 Sha1 签名。这是我的 .net 代码:

private string GetSignature(string data)
{
RSACryptoServiceProvider csp = new RSACryptoServiceProvider(2048);
   csp.FromXmlString(privateKey);

byte[] inputBytes = Encoding.UTF8.GetBytes(data);
byte[] signatureBytes = csp.SignData(inputBytes, "SHA1");
return Convert.ToBase64String(signatureBytes);
}

我的 nodejs 等价物是:

  var sign = crypto.createSign('sha1');
        sign.update(data);
        sign.end();
        var signed = sign.sign(pemKey,'base64');

但是,这两者的结果是不一样的。请帮我解决这个问题。

【问题讨论】:

    标签: node.js sha1


    【解决方案1】:

    我编写了两个程序,一个在 Node.js 中,另一个在 C# 中来演示使用相同的密钥和相同的数据进行签名,在本例中为“hello world”。

    两者的结果签名相同:

    Node.js

    NrBWcxfoUavH + 6cG9rWRtfKKkMaiptrXvjeTlc9NG2ozu3YGBr17dphI3mZ24Khe6LsFQOpiJylg9i5eAxNR22yGDSRKM + SjsRe0pFVk58XdKCtQQs2IiNi12yPifA4AIBBPqCJSGLqTlRKx3urAkpkTAHCBTpMj2BJ95FuufIkzL90SdZYEz0QC8O9nNpatVYlmnCLdU / iAoc7D4gJIBBBzKxaCGL81tgOWf7pKKMPpkbWGH + 6z1fNWnz4HDoIz + CfFwtInQP / nMhMvq5v5O3B / ndHrwYU6YwiewwOqYsvv / bMVXwOAWV5c22oFEPcdUgi6ehCwqcsRM5KtDgVf +克==

    点网:

    NrBWcxfoUavH + 6cG9rWRtfKKkMaiptrXvjeTlc9NG2ozu3YGBr17dphI3mZ24Khe6LsFQOpiJylg9i5eAxNR22yGDSRKM + SjsRe0pFVk58XdKCtQQs2IiNi12yPifA4AIBBPqCJSGLqTlRKx3urAkpkTAHCBTpMj2BJ95FuufIkzL90SdZYEz0QC8O9nNpatVYlmnCLdU / iAoc7D4gJIBBBzKxaCGL81tgOWf7pKKMPpkbWGH + 6z1fNWnz4HDoIz + CfFwtInQP / nMhMvq5v5O3B / ndHrwYU6YwiewwOqYsvv / bMVXwOAWV5c22oFEPcdUgi6ehCwqcsRM5KtDgVf +克==

    我希望这对您有所帮助。在您的情况下,我想知道使用的键是否有任何区别,因为代码(两种语言)与您所拥有的非常相似。无论如何,如果您让这个示例正常运行,您可能能够理解代码中的故障点!

    test-signature.js

    function testSignature(data) {
        const crypto = require('crypto');
        const fs = require('fs');
        const privateKey = fs.readFileSync('./private-key.pem', 'utf8');
        const sign = crypto.createSign('SHA1');
        sign.update(data);
        sign.end();
        const signature = sign.sign(privateKey);
        console.log("Signature:", signature.toString('base64'));
    }
    
    testSignature("hello world");
    

    private-key.pem

    -----开始 RSA 私钥----- MIIEogIBAAKCAQEAoTZ5Vl3o1pwH8pMNQNj47ff7WHJBjYQzGvMRstNjOWqQQnpW VjvXkquRC1xfw8l09AQxk+E3CGPmzHDxdvJFWwMIvzH//xQjvOj1LJiDiDbvMf+V QC4ntx4JgMAv5rW1DjkbpUJeRHjl9r/T17EGKtaf4srejkNRfTKxFMwWjPimCKS7 IOUIKbFYQXEgbMmL9Ow6CNnE/WVD3HahC4OjznkJdkRMrmVFDC8g7nWN0jipfaWO RdzgNdKByn3kYpo3irSgkwE5isdbOWe1tXImjkZgGbpn2eL8sUNpFAPwR81yjQWP uF1O/KO2Kstoc3nwpDo3L2ZGD0IWQNOJss3/mwIDAQABAoIBAC1GxVEyUsBjVgAU uLYruc3rxZWTkUGTjV7WQXQ91jI78YQaI8FYUTUKJlRQfzzXiZc2zk3ABNrAZAOq /MXxSPVEpuI7wq/7EgZuTt1VgCtzcj5Sj7JUxCazsuuMDmf3RIBYHaGOQDdu1Pc1 7OM4/ohter4RR+wgj/RflkhHAVZZ1PpD6wM+7dQ3AmAfbHJIwtad59wKZvxQuZ8m jpYZoQR2+UEhsDkCtyAg+UcuQgqLdLzdskJmpiyKutHHct8Gclrdo9dfMpTIK7Cb C83SFKKwbMPTUB+L/Slho2TQXxo4WLcvDNpFgpRlsAUw7UEwucGzr00HqYMiVyud MEx3peECgYEAzMnEOiaol4T6jcOIYaGhQD8Z1ZjB1uDmmizyHYQM4s1gTZDBtbqk ero20c1sKFeejQ5nBZGy8eN6vBNF1Stt73xkWeED5fXxHyUn6iN4SAT/++SO7Xfz FLzSLfpEWAc4i0w6Pi/tReEn3tYAJ1l2cXP2P/Sc46R2Wk3phI3hbCkCgYEAyYcT 1hTUeQ5Z9Rd9XRqygLz14VZGkKLa4IrhUKSHmHIeBeqIKXuD0ELkSgIxr679CdIL VcT6/uJPqJythYriRN3UHnUx5rvTaymaOP2Eq3s2bpuXTCqipftNTu2FysmdrjT5 qT/bpdRoVeoMAZDgRG7cjlJcsiExrebkZvtBRiMCgYB8f0T+HTZtNvijanXk9L/1 MOdhxUZCfeNzY1OlwfubfkPHo/M/qcIIomBlV78jH3FSS6kx54ukJikdYZIYsBhb eYIAah1WlhgKWSpU209qaS++UQrbLwrmVoxoSzd1VJ55gNP/rl9PFjyI6gyZ33d0 LY1NAEbI1djluWv3m9GpUQKBgBAssz7fdR4yNK4jMICkf+ctQ17OmeNJ7t9Oxj6+ tdNadWZsKHmL3Ex+0evOuUYseUqsfRRpNuv2JgaWbKbnOrnkQ/4d0d9++70CHcqt LlTFEt1Vx5LpaRyBSvcmwTJBdFJjFhardWmd3rHmkwgdJKLZcwJJQf9aAq6+dV5+ LAKZAoGABdwAX1oOqMruuPiqdRPaXoydw3uSwD63/ezafG/Sqyha9m356LyP9Ys3 pZQduJb8TLlpBtdO6YgoW+sDjnNhZHAL9O2mZF0ViN5Nqhmk2qNvlzLaAOr0/Gu2 Mw91BG6RVvEKOpp0We0p7zAuPV02tMiLmGaoUzG5XHcMtGrXWQ8= -----结束 RSA 私钥-----

    Program.cs

    using System;
    using System.Security.Cryptography;
    using System.Text;
                        
    public class Program
    {
        public static void Main()
        {
            testSignature();
        }
        
        static void testSignature()
        {
            Console.WriteLine(GetSignature("hello world"));
        }
        
        static String getPrivateKey()
        {
            return  @"<RSAKeyValue>
            <Modulus>oTZ5Vl3o1pwH8pMNQNj47ff7WHJBjYQzGvMRstNjOWqQQnpWVjvXkquRC1xfw8l09AQxk+E3CGPmzHDxdvJFWwMIvzH//xQjvOj1LJiDiDbvMf+VQC4ntx4JgMAv5rW1DjkbpUJeRHjl9r/T17EGKtaf4srejkNRfTKxFMwWjPimCKS7IOUIKbFYQXEgbMmL9Ow6CNnE/WVD3HahC4OjznkJdkRMrmVFDC8g7nWN0jipfaWORdzgNdKByn3kYpo3irSgkwE5isdbOWe1tXImjkZgGbpn2eL8sUNpFAPwR81yjQWPuF1O/KO2Kstoc3nwpDo3L2ZGD0IWQNOJss3/mw==</Modulus>
            <Exponent>AQAB</Exponent>
            <P>zMnEOiaol4T6jcOIYaGhQD8Z1ZjB1uDmmizyHYQM4s1gTZDBtbqkero20c1sKFeejQ5nBZGy8eN6vBNF1Stt73xkWeED5fXxHyUn6iN4SAT/++SO7XfzFLzSLfpEWAc4i0w6Pi/tReEn3tYAJ1l2cXP2P/Sc46R2Wk3phI3hbCk=</P>
            <Q>yYcT1hTUeQ5Z9Rd9XRqygLz14VZGkKLa4IrhUKSHmHIeBeqIKXuD0ELkSgIxr679CdILVcT6/uJPqJythYriRN3UHnUx5rvTaymaOP2Eq3s2bpuXTCqipftNTu2FysmdrjT5qT/bpdRoVeoMAZDgRG7cjlJcsiExrebkZvtBRiM=</Q>
            <DP>fH9E/h02bTb4o2p15PS/9TDnYcVGQn3jc2NTpcH7m35Dx6PzP6nCCKJgZVe/Ix9xUkupMeeLpCYpHWGSGLAYW3mCAGodVpYYClkqVNtPamkvvlEK2y8K5laMaEs3dVSeeYDT/65fTxY8iOoMmd93dC2NTQBGyNXY5blr95vRqVE=</DP>
            <DQ>ECyzPt91HjI0riMwgKR/5y1DXs6Z40nu307GPr6101p1ZmwoeYvcTH7R6865Rix5Sqx9FGk26/YmBpZspuc6ueRD/h3R3377vQIdyq0uVMUS3VXHkulpHIFK9ybBMkF0UmMWFqt1aZ3eseaTCB0kotlzAklB/1oCrr51Xn6UApk=</DQ>
            <InverseQ>BdwAX1oOqMruuPiqdRPaXoydw3uSwD63/ezafG/Sqyha9m356LyP9Ys3pZQduJb8TLlpBtdO6YgoW+sDjnNhZHAL9O2mZF0ViN5Nqhmk2qNvlzLaAOr0/Gu2Mw91BG6RVvEKOpp0We0p7zAuPV02tMiLmGaoUzG5XHcMtGrXWQ8=</InverseQ>
            <D>LUbFUTJSwGNWABS4tiu5zevFlZORQZONXtZBdD3WMjvxhBojwVhRNQomVFB/PNeJlzbOTcAE2sBkA6r8xfFI9USm4jvCr/sSBm5O3VWAK3NyPlKPslTEJrOy64wOZ/dEgFgdoY5AN27U9zXs4zj+iG16vhFH7CCP9F+WSEcBVlnU+kPrAz7t1DcCYB9sckjC1p3n3Apm/FC5nyaOlhmhBHb5QSGwOQK3ICD5Ry5CCot0vN2yQmamLIq60cdy3wZyWt2j118ylMgrsJsLzdIUorBsw9NQH4v9KWGjZNBfGjhYty8M2kWClGWwBTDtQTC5wbOvTQepgyJXK50wTHel4Q==</D>
            </RSAKeyValue>";
        }
        
        private static string GetSignature(string data)
        {
            string privateKey = getPrivateKey();
        
            RSACryptoServiceProvider csp = new RSACryptoServiceProvider(2048);
            csp.FromXmlString(privateKey);
    
            byte[] inputBytes = Encoding.UTF8.GetBytes(data);
            byte[] signatureBytes = csp.SignData(inputBytes, "SHA1");
            return Convert.ToBase64String(signatureBytes);
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-09
      • 2011-08-28
      • 2015-08-03
      • 2019-10-01
      • 2019-11-19
      • 2021-09-07
      • 2011-02-15
      • 2016-12-14
      • 1970-01-01
      相关资源
      最近更新 更多