我在C#中有以下代码
PasswordDeriveBytes DerivedPassword = new PasswordDeriveBytes(Password, SaltValueBytes, HashAlgorithm, PasswordIterations);
byte[] KeyBytes = DerivedPassword.GetBytes(32);
Run Code Online (Sandbox Code Playgroud)
我正在使用"SHA1"哈希算法.
根据SHA1定义,它生成160位(20字节)密钥.我的问题是GetBytes方法如何从DerivedPassword中获取32个字节,GetBytes方法后面使用了什么算法?
我正在寻找OpenSSL EVP_BytesToKey函数的直接.NET实现.我发现的最接近的是System.Security.Cryptography.PasswordDeriveBytes类(和Rfc2898DeriveBytes),但它似乎略有不同,并且不生成与EVP_BytesToKey 相同的密钥和iv.
我也发现这个实现似乎是一个好的开始,但没有考虑迭代计数.
我意识到有OpenSSL.NET,但它只是本机openssl DLL的包装,而不是"真正的".NET实现.