gpt4 book ai didi

c# - AES 算法名称的 CryptDeriveKey 失败

转载 作者:太空宇宙 更新时间:2023-11-03 20:37:41 27 4
gpt4 key购买 nike

我正在尝试在我的应用程序中实现 AES 加密。我有以下代码来创建用户密码的哈希版本。

PasswordDeriveBytes passwdHash = new PasswordDeriveBytes( password, salt, 
"SHA1", 128 );
byte[] keyBytes = passwdHash.CryptDeriveKey( "AES", "SHA1",
192, iv );

第二行抛出一个 System.Security.Cryptography.CryptographicException 错误消息 Object identifier (OID) is unknown。我使用 Reflector 验证错误被抛出是因为 CryptDeriveKey() 不喜欢“AES”算法名称(我正在使用 AesCryptoServiceProvider() 来执行加密).我尝试将名称更改为“AESManaged”、“AES192”和“Rijndael”,但它们都抛出相同的异常。

我如何让它工作?或者是否有另一种导出 key 字节的方法?另外,是否有关于允许的算法名称字符串是什么的文档?我在 MSDN 文档中找不到该功能的任何内容。

我正在使用 Visual Studio 2008 和目标 .NET Framework 3.5

预先感谢您的帮助!

最佳答案

为什么要从密码盐而不是密码本身派生 key ?通常您使用“原始”密码和盐;事实上,在我的书(grin)第 6 章中有以下示例。

private void GetKeyAndIVFromPasswordAndSalt(
string password,
byte[] salt,
SymmetricAlgorithm symmetricAlgorithm,
ref byte[] key,
ref byte[] iv)
{
Rfc2898DeriveBytes rfc2898DeriveBytes =
new Rfc2898DeriveBytes(password, salt);
key = rfc2898DeriveBytes.GetBytes(symmetricAlgorithm.KeySize / 8);
iv = rfc2898DeriveBytes.GetBytes(symmetricAlgorithm.BlockSize / 8);
}

当然,salt 应该是加密安全的随机字节数组;

private static byte[] GenerateKeyGenerateRandomBytes(int length)
{
byte[] key = new byte[length];
RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();
provider.GetBytes(key);
return key;
}

关于c# - AES 算法名称的 CryptDeriveKey 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4384035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com