SongKer 发布时间:2015-11-26 分类:.NET 阅读:15252次 5 条评论
进过加密后字符串:
Wu1wFpAusn1vJjbM4XrLITa3f3x7If0nDyDYLFzlRPgzFfOnB+02sdPEvvt8GR/0YdQboOANZj6SBOWIhsWpkxDxRRqWqbz+
接收的加密字符串:
Wu1wFpAusn1vJjbM4XrLITa3f3x7If0nDyDYLFzlRPgzFfOnB 02sdPEvvt8GR/0YdQboOANZj6SBOWIhsWpkxDxRRqWqbz
区别在于get方式接收的加密后的字符串里面将‘+’变成了空格‘ ’。导致用密钥解密时候报错:base-64 字符数组或字符串的长度无效。
解决办法:将接收的字符串里的空格‘ ’替换成‘+’。
代码:text.Replace(' ', '+');
------------------20151126更新--------------------
如果用get方式传递加密后的url字符串的话,会出现上面+变空格问题。需要在传递url参数时候,对参数进行安全编码。
编码:将字节数组编码为使用 64 进制数字并适合在 URL 上传输的等效字符串表示形式。
接收时候需要解码:将 URL 字符串标记解码为使用 64 进制数字的等效字节数组。
------------------------------------------------------
下面是详细的加密解密代码:
/// <summary> /// 加密 /// </summary> /// <param name="text"></param> /// <param name="key">8位的key</param> /// <returns></returns> public static string DESEncrypt(string text, string key) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Mode = System.Security.Cryptography.CipherMode.ECB; des.Padding = PaddingMode.Zeros; des.Key = ASCIIEncoding.ASCII.GetBytes(key); byte[] inputBuffer = Encoding.GetEncoding("UTF-8").GetBytes(text); byte[] outputBuffer = des.CreateEncryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length); return Convert.ToBase64String(outputBuffer); }
/// <summary> /// 解密 /// </summary> /// <param name="text"></param> /// <param name="key">8位的key</param> /// <returns></returns> public static string DESDecrypt(string text, string key) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); des.Mode = System.Security.Cryptography.CipherMode.ECB; des.Padding = PaddingMode.Zeros; des.Key = ASCIIEncoding.ASCII.GetBytes(key); byte[] inputBuffer = Convert.FromBase64String(text.Replace(' ', '+')); byte[] outputBuffer = des.CreateDecryptor().TransformFinalBlock(inputBuffer, 0, inputBuffer.Length); return Encoding.GetEncoding("UTF-8").GetString(outputBuffer); }
发布于 2015-12-22 16:25:57 回复该评论
发布于 2015-12-22 16:24:20 回复该评论
发布于 2015-12-02 15:30:54 回复该评论
发布于 2014-12-04 11:27:30 回复该评论
发布于 2014-12-05 11:33:14 回复该评论
发表评论:
◎欢迎您的参与讨论。