public byte[] CryptDeriveKey(
string algname,
string alghashname,
int keySize,
byte[] rgbIV
)
有人可以告诉我algname中有哪些选项吗?如果我想为 AES-128 和 AES-256 指定加密算法,我应该在 algname 中输入什么?
public byte[] CryptDeriveKey(
string algname,
string alghashname,
int keySize,
byte[] rgbIV
)
有人可以告诉我algname中有哪些选项吗?如果我想为 AES-128 和 AES-256 指定加密算法,我应该在 algname 中输入什么?
我不是 100% 确定,但是,algname
是你的算法名称。keySize
是密钥的大小。
你应该使用AES-128
和AES-256
喜欢这个;
CryptDeriveKey("AES", "SHA1", 128, aes.IV)
和
CryptDeriveKey("AES", "SHA1", 256, aes.IV)
从 中查看更多详细信息MSDN
。
这是PasswordDeriveBytes.CryptDeriveKey
方法的反编译代码。
[SecuritySafeCritical]
public byte[] CryptDeriveKey(string algname, string alghashname, int keySize, byte[] rgbIV)
{
if (keySize < 0)
{
throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidKeySize"));
}
int algidHash = X509Utils.NameOrOidToAlgId(alghashname, OidGroup.HashAlgorithm);
if (algidHash == 0)
{
throw new CryptographicException(Environment.GetResourceString("Cryptography_PasswordDerivedBytes_InvalidAlgorithm"));
}
int algid = X509Utils.NameOrOidToAlgId(algname, OidGroup.AllGroups);
if (algid == 0)
{
throw new CryptographicException(Environment.GetResourceString("Cryptography_PasswordDerivedBytes_InvalidAlgorithm"));
}
if (rgbIV == null)
{
throw new CryptographicException(Environment.GetResourceString("Cryptography_PasswordDerivedBytes_InvalidIV"));
}
byte[] o = null;
DeriveKey(this.ProvHandle, algid, algidHash, this._password, this._password.Length, keySize << 0x10, rgbIV, rgbIV.Length, JitHelpers.GetObjectHandleOnStack<byte[]>(ref o));
return o;
}
这是NameOrOidToAlgId
方法的反编译代码。
internal static int NameOrOidToAlgId(string oid, OidGroup oidGroup)
{
if (oid == null)
{
return 0x8004;
}
string str = CryptoConfig.MapNameToOID(oid, oidGroup);
if (str == null)
{
str = oid;
}
int algIdFromOid = GetAlgIdFromOid(str, oidGroup);
switch (algIdFromOid)
{
case 0:
case -1:
throw new CryptographicException(Environment.GetResourceString("Cryptography_InvalidOID"));
}
return algIdFromOid;
}
我这里没有一个反汇编程序喜欢Reflector
找到解决方案。如果你有一个去mscorlib.dll
反编译的PasswordDerivedBytes.CryptDeriveKey
方法。你会在那里找到支持的字符串。
顺便说一句,不支持 AES:这里
可以将 TripleDES 用于 algname 参数。
前任:
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes("password", 24, 1000);
byte[] key = pdb.CryptDeriveKey("TripleDES", "SHA256", 192, tdes.IV);
单击此处查看文档