【发布时间】:2020-10-22 19:19:58
【问题描述】:
我有一个用 C# 编写的函数。基本上,该函数用于根据文本和密钥等参数生成令牌。
public string Encrypt(string input, string key) {
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
byte[] toEncrptArray = UTF8Encoding.UTF8.GetBytes(input);
Aes kgen = Aes.Create("AES");
kgen.Mode = CipherMode.ECB;
kgen.Key = keyArray;
ICryptoTransform cTransform = kgen.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncrptArray, 0, toEncrptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
我正在尝试在 NodeJS 中为上述函数搜索任何相同的替代方法,或者通过任何编译器在 NodeJS 脚本中运行此函数。
我在 NodeJS 中尝试了 crypto-js 模块,但得到了不同的令牌字符串。请提出替代函数或关于在 NodeJS 脚本中运行此函数的任何想法。
我最近在 NodeJS 中的代码:
第一种方法:
var CryptoJS = require("crypto-js");
// Encrypt
var ciphertext = CryptoJS.AES.encrypt("<input>", "<key>").toString();
第二种方法:
var crypto = require('crypto'),
algorithm = 'aes-256-ctr',
password = '<key>';
function encrypt(text){
var cipher = crypto.createCipher(algorithm,password)
var crypted = cipher.update(text,'utf8','hex')
crypted += cipher.final('hex');
return crypted;
}
如果与 C# 函数相比,这两种方法都给出不同的标记。
【问题讨论】:
-
这只是带有 ECB 模式的 AES(顺便说一下,ECB 是不安全的)。这可以通过 CryptoJS 和来自 NodeJS 的加密模块来实现。发布您最近的代码。
-
@Topaco:在问题中添加了最近的 Nodejs 代码。请看一下并提出建议。
标签: javascript c# node.js encryption aes