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

使用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- 王朝網路 版權所有