1
我试图在.NET应用程序中利用OpenSSL中的PKCS5_PBKDF2_HMAC函数,如下所示使用DllImport属性。在.NET包装库OpenSSL.NET(http://openssl-net.sourceforge.net/)目前不公开此OpenSSL的功能,所以我试图以类似的方式这样做,但我与C使用OpenSSL的.NET中的PKCS5_PBKDF2_HMAC
[DllImport(DLLNAME, CallingConvention = CallingConvention.Cdecl)]
public extern static int PKCS5_PBKDF2_HMAC(string pass, int passlen, byte[] salt, int saltlen, int iter, IntPtr digest, int keylen, out byte[] outBytes);
这里我的经验不足导致失败从OpenSSL的源代码的函数签名:
int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, const unsigned char *salt, int saltlen, int iter, const EVP_MD *digest, int keylen, unsigned char *out)
我试图把这个使用下面的方法,但显然有一些错误的,因为我一直得到“试图读取或写入保护内存”在电话会议PKCS5_PBKDF2_HMAC。
public byte[] DeriveKey(MessageDigest digest, string password, byte[] salt, int iterations)
{
var keyBuffer = new byte[digest.Size];
Native.ExpectSuccess(Native.PKCS5_PBKDF2_HMAC(password, password.Length, salt, salt.Length, iterations, digest.Handle, digest.Size, out keyBuffer));
return keyBuffer;
}
如果其他人已经成功做到这一点,或者在我的尝试中看到错误,我将不胜感激任何建议。