我有C#中的代码,你能用语言描述代码中发生了什么吗?我试着用这个主题和这一个 a和这一个进行复制。但我没有成功。如果你举个例子,那就太棒了。
public static string Decrypt(byte[] bytesToBeDecrypted)
{
byte[] decryptedBytes;
using (var ms = new MemoryStream())
{
using (var aes = new RijndaelManaged())
{
aes.KeySize = 256;
aes.BlockSize = 128;
var key = new Rfc2898DeriveBytes(CryptKey, SaltBytes, 1000);
aes.Key = key.GetBytes(aes.KeySize / 8);
aes.IV = key.GetBytes(aes.BlockSize / 8);
aes.Mode = CipherMode.CBC;
using (var cs = new CryptoStream(ms, aes.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(bytesToBeDecrypted, 0, bytesToBeDecrypted.Length);
cs.Close();
}
decryptedBytes = ms.ToArray();
}
}
return Encoding.UTF8.GetString(decryptedBytes);
}
libs:系统,System.IO,System.Linq,System.Security.Cryptography,System.Text
发布于 2022-09-18 17:34:29
MemoryStream -> 文档
创建支持存储为内存的流。
RijndaelManaged -> 文档
允许您使用Rijndeal算法进行对称加密/解密的类。这里似乎是deprecated.Note,“在.NET核心中,它与AES相同,只支持128位块大小。”这就说明了为什么您的aes.BlockSize = 128。
Rfc2898DeriveBytes -> 文档
通过使用基于PBKDF2的伪随机数生成器来实现基于密码的密钥派生功能HMACSHA1.
CryptoStream -> 文档
定义将数据流链接到加密转换的流。
谢天谢地,之前写这篇文章的人帮了你相当多的忙,因为这个方法的名字正是它所做的。在中间,您正在初始化AES类(RijndaelManaged)并设置值。创建一个CryptoStream,其中包含要写入的MemoryStream、所需的解密器(aes.CreateDecryptor()),并设置要写入的模式。我不熟悉CrypoStream类,但我假设cs.Write使用字节解密、开始写入数组的初始索引以及数组的完整长度作为参数。这将被写入内存流(ms),因此需要将其转换为数组,这是用ms.ToArray()完成的。最后,以UTF-8字符串的形式返回解密字节。\
我建议检查这个响应(不是确切的问题,但在Python的实现中类似):C# RFC2898DeriveBytes正在工作,但是Python生成的密钥和IV不使用Python解密。
https://stackoverflow.com/questions/73764865
复制相似问题