带有密码迭代功能的AES CBC从C#到Node

时间:2018-06-25 07:35:54

标签: c# node.js aes

我需要将以下C#函数移植到Node

public static string Decrypt(string CipherText, string Password, string Salt, string InitialVector, int PasswordIterations, string HashAlgorithm = "SHA1", int KeySize = 256) 
{
    var InitialVectorBytes = Encoding.ASCII.GetBytes(InitialVector);
    var SaltValueBytes = Encoding.ASCII.GetBytes(Salt);
    var CipherTextBytes = Convert.FromBase64String(CipherText);
    var DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
    var KeyBytes = DerivedPassword.GetBytes(KeySize / 8);
    var SymmetricKey = new RijndaelManaged();
    SymmetricKey.Mode = CipherMode.CBC;
    var PlainTextBytes = new byte[CipherTextBytes.Length];
    var ByteCount = 0;

    using (var Decryptor = SymmetricKey.CreateDecryptor(KeyBytes, InitialVectorBytes))
    {
        using (var MemStream = new MemoryStream(CipherTextBytes))
        {
            using (var CryptoStream = new CryptoStream(MemStream, Decryptor, CryptoStreamMode.Read))
            {
                ByteCount = CryptoStream.Read(PlainTextBytes, 0, PlainTextBytes.Length);
                MemStream.Close();
                CryptoStream.Close();
            }
        }
    }

    SymmetricKey.Clear();
    return Encoding.UTF8.GetString(PlainTextBytes, 0, ByteCount);
}

到目前为止,我一直在尝试使用各种节点模块,例如mcrypt,aes-js,js-rijndael,rinjndael-js,crypto,crypto-js,cryptojs等,但是我找不到方法或了解我的需求解决这个问题。

让我特别困惑的是如何进行密码迭代步骤。谁能建议支持它的节点模块或实现它的方法?

0 个答案:

没有答案