using System;
using System.IO;
using System.Text;
using System.Security;
using System.Security.Cryptography;
namespace ClassLibraryPublic.DES
{
/// <summary>
/// DES 的摘要说明。
/// </summary>
public class DES
{
protected static string DESKey = "12345678"; //DES密钥 (必须8字节)
protected static string DESIV = "12345678"; //对称算法的初始化向量 (必须8字节)
public DES()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// DES加密方法
/// </summary>
/// <param name="strInput">strInput</param>
/// <returns>string</returns>
public static string DESJiami(string strInput)
{
byte[] arrDESKey =Encoding.ASCII.GetBytes(DESKey); //把字符串转换为字节数组:注意这里最好不要用Convert.FromBase64String(),
byte[] arrDESIV = Encoding.ASCII.GetBytes( DESIV ); //因为Convert.FromBase64String会改变字符串的长度,大概变为原来的4/3长度,而DES加密需要8字节Key(密钥)和IV(偏移量)
byte[] arrInput =Encoding.UTF8.GetBytes(strInput.Trim()); //适合中文格式 注意:这里不能用Convert.FromBase64String
int i=arrDESKey.Length;
DESCryptoServiceProvider objDES= new DESCryptoServiceProvider(); //DES算法的加密的包对象
ICryptoTransform objEncryptor=objDES.CreateEncryptor( arrDESKey, arrDESIV ); //创建加密对象
MemoryStream ms=new MemoryStream(); //缓存流
CryptoStream cs=new CryptoStream(ms,objEncryptor,CryptoStreamMode.Write); //把加密流联系到缓存流里去,方式写入,这里加密流的参数有:加密对象 (以便对流加密)
cs.Write(arrInput,0,arrInput.Length); //用加密流从字节数组里读取字节
cs.FlushFinalBlock(); //更新基础数据源(加密流),随后清除缓冲区。
cs.Close();
string strOutput=Convert.ToBase64String(ms.ToArray()); //把被更新的数据 返回字节数组(可用Convert.FromBase64String反转回来)
return strOutput;
}
/// <summary>
/// DES解密方法
/// </summary>
/// <param name="strInput">strInput</param>
/// <returns>string</returns>
public static string DESJiemi(string strInput)
{
byte[] arrDESKey =Encoding.ASCII.GetBytes(DESKey);
byte[] arrDESIV = Encoding.ASCII.GetBytes(DESIV);
byte[] arrInput = Convert.FromBase64String(strInput.Trim());
DESCryptoServiceProvider objDES= new DESCryptoServiceProvider();
ICryptoTransform objEncryptor=objDES.CreateDecryptor( arrDESKey, arrDESIV );
MemoryStream ms=new MemoryStream();
CryptoStream cs=new CryptoStream(ms,objEncryptor,CryptoStreamMode.Write);
cs.Write(arrInput,0,arrInput.Length);
cs.FlushFinalBlock();
cs.Close();
string strOutput=Encoding.UTF8.GetString(ms.ToArray());
return strOutput;
}
}
}
本文介绍了一个使用DES算法进行数据加密和解密的实现方法。该方法通过定义固定的密钥和初始化向量,利用.NET框架提供的DESCryptoServiceProvider组件完成加密过程,并能够对加密后的数据进行解密还原。
1455

被折叠的 条评论
为什么被折叠?



