C# 到节点加密散列 - md5 和 sha256
C# to node crypto hashing - md5 and sha256
这是我试图移植到 Node crypto 中的 C# 代码,但由于我不知道 C#,所以有点棘手!
public static string EncryptStringToBytes_Aes(string username, string password)
{
string encrypted = string.Empty;
byte[] clearBytes = Encoding.UTF8.GetBytes(password);
Console.WriteLine("1." + clearBytes);
using (Aes aesAlg = Aes.Create())
{
byte[] k; byte[] iv;
byte[] bytes = Encoding.UTF8.GetBytes(username);
k = SHA256.Create().ComputeHash(bytes);
iv = MD5.Create().ComputeHash(bytes);
aesAlg.Key = k;
aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {
csEncrypt.Write(clearBytes, 0, clearBytes.Length); }
encrypted = Convert.ToBase64String(msEncrypt.ToArray());
}
}
return encrypted;
}
C# repl:
https://repl.it/@HarryLincoln/NegligiblePoisedHexagon
节点工作:
crypto.createCipheriv()
绝对看起来像要走的路,但我不相信 c# 方法 (SHA256.Create() & MD5.Create())关心密钥和 iv 的长度 - 但 crypto.createCipheriv()
会。
C# 使用 CryptoStream:所以我认为某种缓冲区是为了查看一些 similar C# -> Node crypto stuff
非常感谢您的帮助!
.Net Framework - AES 加密默认使用 256 位密钥和 CBC 模式以及 PKCS7 填充。
要移植的代码读起来非常简单,它就是这样做的:
return
BASE64 (
AES_ENCRYPT (
password,
Key: SHA256(username),
IV: MD5(username)
)
)
同样可以在 Node 上轻松实现。
const crypto = require('crypto');
const key = crypto.createHash('sha256').update('username', 'utf8').digest();
const iv = crypto.createHash('md5').update('username', 'utf8').digest();
const encryptor = crypto.createCipheriv("aes-256-cbc", key, iv);
var crypted = Buffer.concat([encryptor.update('password', 'utf8'), encryptor.final()]);
let base64data = crypted.toString('base64');
console.log(base64data);
这是我试图移植到 Node crypto 中的 C# 代码,但由于我不知道 C#,所以有点棘手!
public static string EncryptStringToBytes_Aes(string username, string password)
{
string encrypted = string.Empty;
byte[] clearBytes = Encoding.UTF8.GetBytes(password);
Console.WriteLine("1." + clearBytes);
using (Aes aesAlg = Aes.Create())
{
byte[] k; byte[] iv;
byte[] bytes = Encoding.UTF8.GetBytes(username);
k = SHA256.Create().ComputeHash(bytes);
iv = MD5.Create().ComputeHash(bytes);
aesAlg.Key = k;
aesAlg.IV = iv;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) {
csEncrypt.Write(clearBytes, 0, clearBytes.Length); }
encrypted = Convert.ToBase64String(msEncrypt.ToArray());
}
}
return encrypted;
}
C# repl:
https://repl.it/@HarryLincoln/NegligiblePoisedHexagon
节点工作:
crypto.createCipheriv()
绝对看起来像要走的路,但我不相信 c# 方法 (SHA256.Create() & MD5.Create())关心密钥和 iv 的长度 - 但crypto.createCipheriv()
会。C# 使用 CryptoStream:所以我认为某种缓冲区是为了查看一些 similar C# -> Node crypto stuff
非常感谢您的帮助!
.Net Framework - AES 加密默认使用 256 位密钥和 CBC 模式以及 PKCS7 填充。
要移植的代码读起来非常简单,它就是这样做的:
return
BASE64 (
AES_ENCRYPT (
password,
Key: SHA256(username),
IV: MD5(username)
)
)
同样可以在 Node 上轻松实现。
const crypto = require('crypto');
const key = crypto.createHash('sha256').update('username', 'utf8').digest();
const iv = crypto.createHash('md5').update('username', 'utf8').digest();
const encryptor = crypto.createCipheriv("aes-256-cbc", key, iv);
var crypted = Buffer.concat([encryptor.update('password', 'utf8'), encryptor.final()]);
let base64data = crypted.toString('base64');
console.log(base64data);