国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-17 04:27:17
字體:
來源:轉載
供稿:網友

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下使用成功,加密解密正常!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 老河口市| 呼玛县| 图木舒克市| 剑川县| 云安县| 南充市| 札达县| 叙永县| 乌拉特后旗| 婺源县| 景谷| 韶关市| 吉木乃县| 东阳市| 饶河县| 济源市| 萨迦县| 新平| 澄城县| 调兵山市| 吉安市| 紫金县| 南通市| 五家渠市| 高邮市| 拉萨市| 垣曲县| 共和县| 石台县| 荆州市| 苍山县| 黄大仙区| 海伦市| 房产| 景东| 凌云县| 保德县| 九龙坡区| 水城县| 乌兰浩特市| 四川省|