C#的3DES加密解密算法实例代码
C#类如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Text;
usingSystem.Security.Cryptography;
usingSystem.IO;
namespaceConsoleApplication1
{
///<summary>
///加解密类
///</summary>
publicclassEncryptHelper
{
//构造一个对称算法
privateSymmetricAlgorithmmCSP=newTripleDESCryptoServiceProvider();
#region加密解密函数
///<summary>
///字符串的加密
///</summary>
///<paramname="Value">要加密的字符串</param>
///<paramname="sKey">密钥,必须32位</param>
///<paramname="sIV">向量,必须是12个字符</param>
///<returns>加密后的字符串</returns>
publicstringEncryptString(stringValue,stringsKey,stringsIV)
{
try
{
ICryptoTransformct;
MemoryStreamms;
CryptoStreamcs;
byte[]byt;
mCSP.Key=Convert.FromBase64String(sKey);
mCSP.IV=Convert.FromBase64String(sIV);
//指定加密的运算模式
mCSP.Mode=System.Security.Cryptography.CipherMode.ECB;
//获取或设置加密算法的填充模式
mCSP.Padding=System.Security.Cryptography.PaddingMode.PKCS7;
ct=mCSP.CreateEncryptor(mCSP.Key,mCSP.IV);//创建加密对象
byt=Encoding.UTF8.GetBytes(Value);
ms=newMemoryStream();
cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);
cs.Write(byt,0,byt.Length);
cs.FlushFinalBlock();
cs.Close();
returnConvert.ToBase64String(ms.ToArray());
}
catch(Exceptionex)
{
//MessageBox.Show(ex.Message,"出现异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return("ErrorinEncrypting"+ex.Message);
}
}
///<summary>
///解密字符串
///</summary>
///<paramname="Value">加密后的字符串</param>
///<paramname="sKey">密钥,必须32位</param>
///<paramname="sIV">向量,必须是12个字符</param>
///<returns>解密后的字符串</returns>
publicstringDecryptString(stringValue,stringsKey,stringsIV)
{
try
{
ICryptoTransformct;//加密转换运算
MemoryStreamms;//内存流
CryptoStreamcs;//数据流连接到数据加密转换的流
byte[]byt;
//将3DES的密钥转换成byte
mCSP.Key=Convert.FromBase64String(sKey);
//将3DES的向量转换成byte
mCSP.IV=Convert.FromBase64String(sIV);
mCSP.Mode=System.Security.Cryptography.CipherMode.ECB;
mCSP.Padding=System.Security.Cryptography.PaddingMode.PKCS7;
ct=mCSP.CreateDecryptor(mCSP.Key,mCSP.IV);//创建对称解密对象
byt=Convert.FromBase64String(Value);
ms=newMemoryStream();
cs=newCryptoStream(ms,ct,CryptoStreamMode.Write);
cs.Write(byt,0,byt.Length);
cs.FlushFinalBlock();
cs.Close();
returnEncoding.UTF8.GetString(ms.ToArray());
}
catch(Exceptionex)
{
//MessageBox.Show(ex.Message,"出现异常",MessageBoxButtons.OK,MessageBoxIcon.Warning);
return("ErrorinDecrypting"+ex.Message);
}
}
#endregion
}
}
调用方法如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
namespaceConsoleApplication1
{
classProgram
{
staticvoidMain(string[]args)
{
EncryptHelperhelper=newEncryptHelper();
//加密
stringoldValue="13800138000";
//加密后结果
//密钥,必须32位
stringsKey="qJzGEh6hESZDVJeCnFPGuxzaiB7NLQM5";
//向量,必须是12个字符
stringsIV="andyliu1234=";
//print
stringnewValue= helper.EncryptString(oldValue,sKey,sIV);
Console.WriteLine("加密后:"+newValue);
//解密
stringdesValue=helper.DecryptString(newValue,sKey,sIV);
//
Console.WriteLine("解密后:"+desValue);
Console.ReadLine();
}
}
}
相关文章
- C#-改变控件样式
- C# 可空值类型详解编程语言
- C#参数的按值传递和按引用传递
- 用c#获得当前用户的ApplicationData文件夹位置
- asp.net(c#)利用构造器链的代码
- c#SQLHelper(forwinForm)实现代码
- C#开发之Socket网络编程TCP/IP层次模型、端口及报文等探讨
- C#打印出正等腰三角形实例代码
- 用C#实现启动另一程序的方法实例
- C#格式化字符首字母大写的方法
- c#代码自动修改解决方案下任意文件实例
- c#模拟jsescape方法的简单实例
- C#使用MailAddress类发送html格式邮件的实例代码
- C#截取中英文混合指定长度字符串实例
- C#中按指定质量保存图片的实例代码
- C#伪彩色处理的具体方法
- C#使用PHP服务端的WebService通信实例
- C#装饰者模式实例分析
- C#算法之全排列递归算法实例讲解
- C#、vb.net及SQL判断指定年份是否为闰年的方法
- C#聊天程序服务端与客户端完整实例代码
- C#中csv文件与DataTable互相导入处理实例解析