I have a task to convert C# code to NodeJS. I got stuck in the conversion. Looks a bit complicated to me. Any help would be appreciated.
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);
This is what i come up with. But it is not producing the same result as C# code.
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');
After a long struggle, i managed to convert myself. Just leaving it here. May save time for someone.
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;
In routes.js import the authhelper.js and use it as below.
var authHelper = require('authhelper');
var str = 'mystring';
var privateKeyFile = 'files/pvtKey';
var authKey = authHelper.generateAuthKey(str, privateKeyFile);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.