通过C#进行AES-256-CTR加密并在JS中解密

时间:2019-03-01 10:28:51

标签: c# encryption aes bouncycastle cryptojs

对于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;
}

当应该返回输入的原始数据时,解密函数似乎正在返回一个空字符串。

任何想法在这里可能是什么问题?

0 个答案:

没有答案