对于C#项目使用库 Org.BouncyCastle.Crypto ,对于JS项目使用库 crypto-js 。
尝试使用以下功能通过C#加密数据,该C#输出字符串:
public string EncryptData(string data)
{
byte[] inputBytes = Encoding.UTF8.GetBytes(data);
byte[] keyBytes = Encoding.UTF8.GetBytes(ENCRYPTION_KEY);
IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CTR/NoPadding");
cipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", keyBytes), new byte[16]));
byte[] encryptedBytes = cipher.DoFinal(inputBytes);
string base64EncryptedOutputString = Convert.ToBase64String(encryptedBytes);
return base64EncryptedOutputString;
}
然后使用JS中的以下功能解密:
function decrypt(text) {
var decipher = crypto.createDecipher(algorithm, password);
var dec = decipher.update(text, "hex", "utf8");
dec += decipher.final("utf8");
return dec;
}
下面是通过JS加密的功能,以防它有助于使C#代码与JS代码相同(反之亦然):
function encrypt(text) {
var cipher = crypto.createCipher(algorithm, password);
var crypted = cipher.update(text, "utf8", "hex");
crypted += cipher.final("hex");
return crypted;
}
当应该返回输入的原始数据时,解密函数似乎正在返回一个空字符串。
任何想法在这里可能是什么问题?