所以我尝试使用C#DES加密数据
有以下代码
static public string Encrypt(string _dataToEncrypt) {
SymmetricAlgorithm algorithm = DES.Create();
ICryptoTransform transform = algorithm.CreateEncryptor(key, iv);
byte[] inputbuffer = Encoding.Unicode.GetBytes(_dataToEncrypt);
byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
return Convert.ToBase64String(outputBuffer);
}
static public string Decrypt(string _dataToDecrypt) {
SymmetricAlgorithm algorithm = DES.Create();
ICryptoTransform transform = algorithm.CreateDecryptor(key, iv);
byte[] inputbuffer = Convert.FromBase64String(_dataToDecrypt); // Here is the problem.
byte[] outputBuffer = transform.TransformFinalBlock(inputbuffer, 0, inputbuffer.Length);
return Encoding.Unicode.GetString(outputBuffer);
}
我收到错误System.FormatException: 'Invalid length for a Base-64 char array or string.'
当字符串具有偶数个字符时,它会起作用。
用奇数个字符加密/解密数据是否真实?
答案 0 :(得分:1)
DES,以及AES对可以加密的内容没有限制,问题出在其他地方。
看起来这是一个Bas64编码问题,因为发生错误的行。
可能会从Base64中删除尾随“=”字符。
信息:
DES是一种基于块的加密算法,因此输入必须是块大小的精确倍数,DES为8字节。当输入不是总是时,必须添加精确的多个填充,这是让实现通过指定填充(通常为DES的PKCS#5)为您执行此操作的最简单方法。
对于SymmetricAlgorithm使用填充属性PKCS7
,最好完全指定所有内容而不依赖于默认值。
algorithm.Padding = PaddingMode.PKCS7;