C# Java 3DES加密解密 扩展及修正 问题
注: C#已亲测及做扩展, Java 部分未做验证
/// <summary>
/// 3DES加密解密
/// -----------------------------------------------------------
/// 说明:
/// 转载自网上http://bbs.csdn.net/topics/350158619
/// 并加以扩展
/// 修正:
/// 1. 修改正解密后出现 ' '
/// 注: 1. 向量不能小于8位
/// 2. 明文末尾如果是带' '字符,则会一起去掉
/// -----------------------------------------------------------
/// 扩展人:Wuyf 11222337#qq.com
/// 日 期:2014-11-29
/// </summary>
C# 代码
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Web; namespace WuFrame.Tool { /// <summary> /// 3DES 加密解密 /// ----------------------------------------------------------- /// 说明: /// 转载自网上http://bbs.csdn.net/topics/350158619 /// 并加以扩展 /// 修正: /// 1. 修改正解密后出现 ' ' /// 注: 1. Key必须为24位 /// 2. 向量不能小于8位 /// 3. 明文末尾如果是带' '字符,则会一起去掉 /// ----------------------------------------------------------- /// 扩展人:Wuyf 11222337#qq.com /// 日 期:2014-11-29 /// </summary> public class Des3Tool { #region CBC模式** #region 扩展方法 /// <summary> /// 3DES 加密(字符串参数和返回值) /// </summary> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <param name="data">明文</param> /// <param name="isRetBase64">true:返回base64,false:返回Utf8</param> /// <returns></returns> public static string Des3EncodeCBC(string key, string iv, string data) { string rtnResult = string.Empty; byte[] rtnValue = null; byte[] keyArr = Encoding.UTF8.GetBytes(key); byte[] ivArr = Encoding.UTF8.GetBytes(iv); byte[] dataArr = Encoding.UTF8.GetBytes(data); rtnValue = Des3EncodeCBC(keyArr, ivArr, dataArr); rtnResult = Convert.ToBase64String(rtnValue); return rtnResult; } /// <summary> /// 3DES 解密(字符串参数和返回值) /// </summary> /// <param name="key">密钥</param> /// <param name="iv">向量</param> /// <param name="data">明文</param> /// <returns></returns> public static string Des3DecodeCBC(string key, string iv, string dataEnBase64) { string rtnResult = string.Empty; byte[] rtnValue = null; byte[] keyArr = Encoding.UTF8.GetBytes(key); byte[] ivArr = Encoding.UTF8.GetBytes(iv); byte[] dataArr = Convert.FromBase64String(dataEnBase64); rtnValue = Des3DecodeCBC(keyArr, ivArr, dataArr); rtnResult = Encoding.UTF8.GetString(rtnValue).TrimEnd('