SymmetricAlgorithm DES C#。 Base64编码

时间:2017-03-16 15:55:16

标签: c# encryption msdn des

所以我尝试使用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.'

当字符串具有偶数个字符时,它会起作用。

用奇数个字符加密/解密数据是否真实?

1 个答案:

答案 0 :(得分:1)

DES,以及AES对可以加密的内容没有限制,问题出在其他地方。

看起来这是一个Bas64编码问题,因为发生错误的行。

可能会从Base64中删除尾随“=”字符。

信息:

DES是一种基于块的加密算法,因此输入必须是块大小的精确倍数,DES为8字节。当输入不是总是时,必须添加精确的多个填充,这是让实现通过指定填充(通常为DES的PKCS#5)为您执行此操作的最简单方法。

对于SymmetricAlgorithm使用填充属性PKCS7,最好完全指定所有内容而不依赖于默认值。

algorithm.Padding = PaddingMode.PKCS7;