AES CBC с портом функции итерации паролей от C # до узла - PullRequest
0 голосов
/ 25 июня 2018

мне нужно перенести следующую функцию 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);
}

До сих пор я пробовал использовать различные модули Node, такие как mcrypt, aes-js, js-rijndael, rinjndael-js, crypto, crypto-js, cryptojs и т. д., но я не могу найти способ или понять, как мне нужно подойти к этому.

Что меня особенно смущает, так это то, как сделать шаг итерации пароля.Кто-нибудь может предложить модуль узла, который его поддерживает, или способ его реализации?

...