我有C#中的代码,你能用文字描述一下代码中发生了什么吗?我试着用这个主题,这个和这个来复制。但我没有成功。如果你举一个例子,那就太棒了。
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,System.IO,System.Linq,System.Security.Cryptography,System.Text
内存流->文档
创建其后备存储为内存的流
RijndaelManaged->文档
允许您使用Rijndeal算法进行对称加密/解密的类。似乎已弃用。这里要注意的是;在.NET Core中,它与AES相同,只支持128位的块大小"这就解释了为什么你的aes。块大小=128
Rfc2898字节数->文档
通过使用基于HMACSHA1的伪随机数生成器,实现基于密码的密钥派生功能PBKDF2
加密流->文档
定义将数据流链接到加密转换的流。
值得庆幸的是,之前写这篇文章的人帮了你很多忙,因为这个方法的名字正是它正在做的。在中间,您正在初始化AES类(RijndaelManaged(并设置值。创建一个CryptoStream,其中包含要写入的MemoryStream、所需的解密器(aes.CreateDecryptor(((,并将模式设置为写入。我不熟悉CrypoStream类,但我认为是cs。Write是使用要解密的字节、要开始写入的数组的初始索引以及数组的全长作为参数。这会被写入内存流(ms(,因此您需要将其转换为一个数组,这是用ms.ToArray((完成的。最后,您将解密的字节作为UTF-8字符串返回。\
我建议检查这个响应(不是确切的问题,但在Python中的实现类似(:C#RFC2898DeriveBytes正在工作,但Python PBKDF2生成的密钥和IV无法使用Python AES解密