【发布时间】:2016-07-12 15:54:24
【问题描述】:
我们如何在 .Net Core 类库中使用 Rijndael 加密? (不是 .Net Framework 类库)我们需要创建一个共享的 .Net Core 库以在多个项目中使用,并且需要实现跨项目使用相同 Rijndael 加密的 Encrypt 和 Decrypt 方法。
我们目前正在使用:
- VS 企业 2015
- c#
- .Net Core 类库
- .NETStandard,版本=v1.6 参考
.Net Core 1.0 版本似乎缺少 Rijndael 和 AES 的实现......它似乎只包括基类。我们如何将 Rijndael 或 AES 加密的 .Net Core 实现添加为对新 .Net Core 类库项目的引用?
以下是适用于 .Net Framework 4.5.2 的 Encrypt 方法:
public static string Encrypt(string valueToEncrypt, string symmetricKey, string initializationVector)
{
string returnValue = valueToEncrypt;
var aes = new System.Security.Cryptography.RijndaelManaged();
try
{
aes.Key = ASCIIEncoding.ASCII.GetBytes(symmetricKey);
aes.IV = ASCIIEncoding.ASCII.GetBytes(initializationVector);
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.ISO10126;
var desEncrypter = aes.CreateEncryptor();
var buffer = ASCIIEncoding.ASCII.GetBytes(valueToEncrypt);
returnValue = Convert.ToBase64String(desEncrypter.TransformFinalBlock(buffer, 0, buffer.Length));
}
catch (Exception)
{
returnValue = string.Empty;
}
return returnValue;
}
【问题讨论】:
-
.NET Core 有什么问题?缺少图书馆吗?
-
似乎它在 1.1 版本的路线图上:github.com/dotnet/corefx/issues/9984
-
正确的 Nate,主要问题似乎是当前版本的 .Net Core 的 Cryptography 参考中缺少 Rijndael 实现......只是基类抽象实现。
-
1. ISO10126 已被撤销,PKCS#7 可能是更好的选择,实际上似乎符合 ISO10126 规范。 2. 最好使用随机 iv 否则相同的消息具有相同的加密字节。通常,iv 是从 CPRNG 创建的,并添加到加密数据之前,以便在解密期间使用。 3. 使用字符串作为加密不是特别安全,可能会导致密钥长度问题。最好使用 PBKFD1 等密钥派生函数。也有盲目的希望密码是ACIII,而不是unicode等其他编码。
标签: c# .net cryptography .net-core rijndaelmanaged