关闭

DES加密方法对字符串加密。

833人阅读 评论(0) 收藏 举报

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;
  }
 }
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:74350次
    • 积分:948
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:25篇
    • 译文:0篇
    • 评论:3条
    文章分类
    私服发布站