【发布时间】:2015-10-30 16:11:59
【问题描述】:
我在磁盘上有用AesCryptoServiceProvider 加密的文件。
我需要将代码转换为 PCL(它没有 AesCryptoServiceProvider 类)。所以我想使用 Bouncy Castle (https://www.nuget.org/packages/Portable.BouncyCastle/) 在不更改加密的情况下读取和保存文件。并防止需要转换所有文件..
Key 的长度为 32 个字节。
IV 的长度为 16 个字节。
这是原始代码:
private static byte[] Encrypt(string plainText, byte[] Key, byte[] IV)
{
using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream outputStream = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
swEncrypt.Write(plainText);
}
}
return outputStream.ToArray();
}
}
}
AesCryptoServiceProvider 的默认模式是CBC,填充类型为PKCS7,然后我尝试使用类CbcBlockCipher 和Pkcs7Padding。这是我最后一次尝试:
private static byte[] Encrypt(byte[] input, byte[] key, byte[] IV)
{
var keyParameter = new KeyParameter(key);
var parameters = new ParametersWithIV(keyParameter, IV);
var cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(new AesEngine()), new Pkcs7Padding());
cipher.Init(true, parameters);
var rsl = new byte[cipher.GetOutputSize(input.Length)];
var outOff = cipher.ProcessBytes(input, 0, input.Length, rsl, 0);
cipher.DoFinal(rsl, outOff);
return rsl;
}
文本“test”的原始结果是8jykPv2OSILKjJwvgLRr1w==,但新代码是BaYeiuWSnRiHXBpwt19Dag==。
那我想念什么?
感谢您的帮助!
更新 #1: 这是 Key 和 IV 的值:
private static byte[] KEY = {98, 193, 95, 78, 211, 151, 118, 57, 179, 5, 85, 181, 133, 20, 94, 101, 184, 175, 94, 164, 150, 119, 75, 207, 189, 178, 21, 213, 13, 217, 174, 44};
private static byte[] IV = {1, 199, 179, 189, 160, 220, 229, 238, 179, 14, 255, 147, 187, 49, 179, 134 };
更新 #2:
对于 Bouncy Castle,我使用以下代码将 plainText 转换为 input:
var input = Encoding.Unicode.GetBytes(plainText);
差异来自那里......
【问题讨论】:
-
什么是key和IV?
-
@JamesKPolk : 添加的值!
-
能不能借此机会用安全加密代替加密?现有的比较弱,因为它使用常量 IV(完全没有 IV 的点)并且缺少 MAC。
-
@CodesInChaos :该常量仅用于测试。我试图转换代码,所以我使用了这个常量。
标签: c# cryptography aes bouncycastle