当前位置: 首页 > 编程语言 > C#

C#版OpenSSLEVP_BytesToKey方法?分享

时间:2023-04-10 19:52:31 C#

C#版本的OpenSSLEVP_BytesToKey方法?我正在寻找OpenSSLEVP_BytesToKey函数的直接.NET实现。我找到的最接近的是System.Security.Cryptography.PasswordDeriveBytes类(和Rfc2898DeriveBytes),但它似乎略有不同,并且不会生成与EVP_BytesToKey相同的密钥和iv。我还发现这个实现似乎是一个好的开始,但没有考虑迭代计数。我知道有OpenSSL.NET,但它只是本机opensslDLL的包装器,而不是“真正的”.NET实现。找到EVP_BytesToKey方法的伪代码解释(openssl源码中的/doc/ssleay.txt):/*M[]是消息摘要数组*MD()是消息摘要函数*/M[0]=MD(数据。盐);for(i=1;i因此,基于此,我能够想出这个C#方法(这似乎适用于我的目的,并假设32字节密钥和16字节iv):privatestaticvoidDeriveKeyAndIV(byte[]data,byte[]salt,intcount,outbyte[]key,outbyte[]iv){ListhashList=newList();byte[]currentHash=newbyte[0];intpreHashLength=data.Length+((盐!=null)?salt.Length:0);byte[]preHash=newbyte[preHashLength];System.Buffer.BlockCopy(data,0,preHash,0,data.Length);if(salt!=null)系统.Buffer.BlockCopy(salt,0,preHash,data.Length,salt.Length);MD5hash=MD5.Create();currentHash=hash.ComputeHash(preHash);for(inti=1;i更新:这里有更多/less相同的实现,但使用.NETDeriveBytes接口:https://gist.github.com/1339719OpenSSL1.1.0c更改了一些内部组件中使用的摘要算法。以前使用MD5切换到SHA256,1.1.0。请注意,在EVP_BytesToKey和opensslenc等命令中,更改不会影响您。以上就是C#学习教程:C#版的OpenSSLEVP_BytesToKey方法?如果分享的所有内容对您有用,需要了解更多C#学习教程,希望您多多关注---本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: