程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 使用DES對稱加密代碼,支持中文

使用DES對稱加密代碼,支持中文

編輯:.NET實例教程
//名稱空間 
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下使用成功,加密解密正常!
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved