转:system.Security.Cryptography C# 加密和解密(4)

  使用对称算法加密本地数据时比较适合。在保持代码通用时我们可以选择多种算法,当数据通过特定的CryptoStream时算法使用转换对象加密该数据。需要将数据通过网络发

送时,首先使用接收的公共不对称密钥加密对称密钥。

  本文只涉及到System.Security.Cryptography名字空间的一部分服务。尽管文章保证只有某个私有密钥可以解密相应公共密钥加密的信息,但是它没有保证是谁发送的公共密

钥,发送者也可能是假的。需要使用处理数字证书的类来对付该风险。

------------------------------------------------------------------------
DES对称加密算法
//名称空间 
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; 
           }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/46bbcb8eb1be1abc5d67a31a1652636a.html