【问题标题】:Convert C# to NodeJS (Sha1, Message Digest, Sign with Private Key)将 C# 转换为 NodeJS(Sha1、消息摘要、使用私钥签名)
【发布时间】:2018-12-16 21:04:28
【问题描述】:

我的任务是将 C# 代码转换为 NodeJS。我陷入了转换。对我来说看起来有点复杂。任何帮助将不胜感激。

byte[] str = ASCIIEncoding.Unicode.GetBytes('mystring');
SHA1 sha1 = SHA1.Create();
byte[] hashdata = sha1.ComputeHash(str);

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(PrivateKey);
byte[] signature = rsa.SignData(hashdata, new SHA1CryptoServiceProvider());
return Convert.ToBase64String(signature);

这就是我想出的。但它产生的结果与 C# 代码不同。

var convertString = require('convert-string');
var sha1 = require('js-sha1');
var rsaSign = require('jsrsasign');
var rsaUtil = require('jsrsasign-util');

var privateKeyFile = 'files/pvtKey'; //Its a PEM Private Key converted from XML Private Key.
/* -----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQCYeml ... 
-----END RSA PRIVATE KEY-----*/
var bytesArray = convertString.stringToBytes('mystring');
var messageDigest = sha1(bytesArray);
var privateKeyContent = rsaUtil.readFile(privateKeyFile);
var privateKey = rsaSign.KEYUTIL.getKey(privateKeyContent);
var sig = new rsaSign.KJUR.crypto.Signature({'alg': 'SHA1withRSA'});
sig.init(privateKey);
sig.updateHex(messageDigest);
var signedMsgDigest = sig.sign();
return Buffer.from(signedMsgDigest).toString('base64');

【问题讨论】:

    标签: c# node.js rsa sha1 private-key


    【解决方案1】:

    经过长期的奋斗,我成功地改变了自己。就放在这里吧。可以为某人节省时间。

    authhelper.js

    var sha1 = require('js-sha1');
    var rsaSign = require('jsrsasign');
    var rsaUtil = require('jsrsasign-util');
    
    var authhelper = {
        generateAuthKey: function (str, privateKeyFile) {
            // Change to bytes array with UTF-16 encoding
            var bytesArray = this.stringToByteArray(str, 'utf16le');
    
            // Hash result of step b with SHA1 algorithm to get message digest
            var messageDigest = sha1(bytesArray);
    
            // Sign message digest using private key (SHA1 with RSA)
            var privateKeyContent = rsaUtil.readFile(privateKeyFile);
            var privateKey = rsaSign.KEYUTIL.getKey(privateKeyContent);
            var sig = new rsaSign.KJUR.crypto.Signature({'alg': 'SHA1withRSA'});
            sig.init(privateKey);
            sig.updateHex(messageDigest);
            var signedMsgDigest = sig.sign();
    
            // Encode with Base64
            var authKey = Buffer.from(signedMsgDigest, 'hex').toString('base64');
    
            return authKey;
        },
    
        stringToByteArray: function (str, encoding) {
            var byteArr = [];
    
            var buffer = new Buffer(str, encoding);
            for (var i = 0; i < buffer.length; i++) {
                byteArr.push(buffer[i]);
            }
    
            return byteArr;
        }
    };
    
    module.exports = authhelper;
    

    在 routes.js 中导入 authhelper.js 并如下使用它。

    var authHelper = require('authhelper');
    
    var str = 'mystring';
    var privateKeyFile = 'files/pvtKey';
    var authKey = authHelper.generateAuthKey(str, privateKeyFile);
    

    【讨论】:

      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 2015-11-24
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      相关资源
      最近更新 更多