| 導購 | 订阅 | 在线投稿
分享
 
 
 

使用DES对称加密代码,支持中文

2008-12-13 08:24:14  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
  view plaincopy to clipboardprint?

  //名称空间

  using System;

  using System.Security.Cryptography;

  using System.IO;

  using System.Text;

  

  //方法

  //加密方法

  public string Encrypt(string pToEncrypt, string sKey)

  {

  DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  //把字符串放到byte数组中

  //原来使用的UTF8编码,我改成Unicode编码了,不行

  byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

  //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);

  

  //建立加密对象的密钥和偏移量

  //原文使用ASCIIEncoding.ASCII方法的GetBytes方法

  //使得输入密码必须输入英文文本

  des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

  des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

  MemoryStream ms = new MemoryStream();

  CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);

  //Write the byte array into the crypto stream

  //(It will end up in the memory stream)

  cs.Write(inputByteArray, 0, inputByteArray.Length);

  cs.FlushFinalBlock();

  //Get the data back from the memory stream, and into a string

  StringBuilder ret = new StringBuilder();

  foreach(byte b in ms.ToArray())

  {

  //Format as hex

  ret.AppendFormat("{0:X2}", b);

  }

  ret.ToString();

  return ret.ToString();

  }

  

  //解密方法

  public string Decrypt(string pToDecrypt, string sKey)

  {

  DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  

  //Put the input string into the byte array

  byte[] inputByteArray = new byte[pToDecrypt.Length / 2];

  for(int x = 0; x < pToDecrypt.Length / 2; x++)

  {

  int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));

  inputByteArray[x] = (byte)i;

  }

  

  //建立加密对象的密钥和偏移量,此值重要,不能修改

  des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

  des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

  MemoryStream ms = new MemoryStream();

  CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);

  //Flush the data through the crypto stream into the memory stream

  cs.Write(inputByteArray, 0, inputByteArray.Length);

  cs.FlushFinalBlock();

  

  //Get the decrypted data back from the memory stream

  //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象

  StringBuilder ret = new StringBuilder();

  

  return System.Text.Encoding.Default.GetString(ms.ToArray());

  }

  

  //-------代码完毕--------------------

  //名称空间

  using System;

  using System.Security.Cryptography;

  using System.IO;

  using System.Text;

  //方法

  //加密方法

  public string Encrypt(string pToEncrypt, string sKey)

  {

  DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  //把字符串放到byte数组中

  //原来使用的UTF8编码,我改成Unicode编码了,不行

  byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);

  //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);

  //建立加密对象的密钥和偏移量

  //原文使用ASCIIEncoding.ASCII方法的GetBytes方法

  //使得输入密码必须输入英文文本

  des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

  des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

  MemoryStream ms = new MemoryStream();

  CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write);

  //Write the byte array into the crypto stream

  //(It will end up in the memory stream)

  cs.Write(inputByteArray, 0, inputByteArray.Length);

  cs.FlushFinalBlock();

  //Get the data back from the memory stream, and into a string

  StringBuilder ret = new StringBuilder();

  foreach(byte b in ms.ToArray())

  {

  //Format as hex

  ret.AppendFormat("{0:X2}", b);

  }

  ret.ToString();

  return ret.ToString();

  }

  //解密方法

  public string Decrypt(string pToDecrypt, string sKey)

  {

  DESCryptoServiceProvider des = new DESCryptoServiceProvider();

  //Put the input string into the byte array

  byte[] inputByteArray = new byte[pToDecrypt.Length / 2];

  for(int x = 0; x < pToDecrypt.Length / 2; x++)

  {

  int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));

  inputByteArray[x] = (byte)i;

  }

  //建立加密对象的密钥和偏移量,此值重要,不能修改

  des.Key = ASCIIEncoding.ASCII.GetBytes(sKey);

  des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);

  MemoryStream ms = new MemoryStream();

  CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write);

  //Flush the data through the crypto stream into the memory stream

  cs.Write(inputByteArray, 0, inputByteArray.Length);

  cs.FlushFinalBlock();

  //Get the decrypted data back from the memory stream

  //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象

  StringBuilder ret = new StringBuilder();

  return System.Text.Encoding.Default.GetString(ms.ToArray());

  }

  //-------代码完毕--------------------

  注意:sKey输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少,否则出错。

  本人使用Windows2000 Server .Net Framework SP3 ,VS.Net下在asp.net下使用成功,加密解密正常!
 
 
 
view plaincopy to clipboardprint? //名称空间 using System; using System.Security.Cryptography; using System.IO; using System.Text; //方法 //加密方法 public string Encrypt(string pToEncrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中 //原来使用的UTF8编码,我改成Unicode编码了,不行 byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); //建立加密对象的密钥和偏移量 //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 //使得输入密码必须输入英文文本 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write); //Write the byte array into the crypto stream //(It will end up in the memory stream) cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //Get the data back from the memory stream, and into a string StringBuilder ret = new StringBuilder(); foreach(byte b in ms.ToArray()) { //Format as hex ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } //解密方法 public string Decrypt(string pToDecrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //Put the input string into the byte array byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for(int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } //建立加密对象的密钥和偏移量,此值重要,不能修改 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write); //Flush the data through the crypto stream into the memory stream cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //Get the decrypted data back from the memory stream //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 StringBuilder ret = new StringBuilder(); return System.Text.Encoding.Default.GetString(ms.ToArray()); } //-------代码完毕-------------------- //名称空间 using System; using System.Security.Cryptography; using System.IO; using System.Text; //方法 //加密方法 public string Encrypt(string pToEncrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中 //原来使用的UTF8编码,我改成Unicode编码了,不行 byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt); //建立加密对象的密钥和偏移量 //原文使用ASCIIEncoding.ASCII方法的GetBytes方法 //使得输入密码必须输入英文文本 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(),CryptoStreamMode.Write); //Write the byte array into the crypto stream //(It will end up in the memory stream) cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //Get the data back from the memory stream, and into a string StringBuilder ret = new StringBuilder(); foreach(byte b in ms.ToArray()) { //Format as hex ret.AppendFormat("{0:X2}", b); } ret.ToString(); return ret.ToString(); } //解密方法 public string Decrypt(string pToDecrypt, string sKey) { DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //Put the input string into the byte array byte[] inputByteArray = new byte[pToDecrypt.Length / 2]; for(int x = 0; x < pToDecrypt.Length / 2; x++) { int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16)); inputByteArray[x] = (byte)i; } //建立加密对象的密钥和偏移量,此值重要,不能修改 des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(),CryptoStreamMode.Write); //Flush the data through the crypto stream into the memory stream cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); //Get the decrypted data back from the memory stream //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 StringBuilder ret = new StringBuilder(); return System.Text.Encoding.Default.GetString(ms.ToArray()); } //-------代码完毕-------------------- 注意:sKey输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少,否则出错。 本人使用Windows2000 Server .Net Framework SP3 ,VS.Net下在asp.net下使用成功,加密解密正常!
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
王朝网络微信公众号
微信扫码关注本站公众号 wangchaonetcn
 
  免责声明:本文仅代表作者个人观点,与王朝网络无关。王朝网络登载此文出于传递更多信息之目的,并不意味著赞同其观点或证实其描述,其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有