将C#转换为NodeJS(Sha1、消息摘要、使用私钥签名)

将C#转换为NodeJS(Sha1、消息摘要、使用私钥签名),c#,node.js,rsa,sha1,private-key,C#,Node.js,Rsa,Sha1,Private Key,我的任务是将C#代码转换为NodeJS。我被困在转换过程中。我觉得有点复杂。任何帮助都将不胜感激 byte[] str = ASCIIEncoding.Unicode.GetBytes('mystring'); SHA1 sha1 = SHA1.Create(); byte[] hashdata = sha1.ComputeHash(str); RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); rsa.FromXmlS

我的任务是将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代码相同的结果


经过长期的斗争,我终于改变了自己。就把它留在这里。可以为某人节省时间

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;
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;
var authHelper = require('authhelper');

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