DES加密解密


前言  

  DES(Data Encryption Standard)的加密與MD5不同,DES可以解密,而MD5的加密是不可逆的;用於數字簽名和數據加密,對稱加密-即加密秘鑰和解密秘鑰相同。
標准的DES密鑰長度為64bit,密鑰每個字符占7bit,外加1bit的奇偶校驗,64/(7+1)=8;所以必須是8個字符也只能是8個字符,但 .NET 里 DESCryptoServiceProvider 這個類是微軟已經封裝好的了,如果密鑰長度不足,會以 PKCS7Padding 方式補足位。

 

加密

  首先我們先定義好key和iv

private static string key = "abcd1234";//密文 加密解密是都需要密文且保持一致

private static string iv = "12345678";//加密解密時key 、 iv 中傳入的key、iv值一致

  注意:

    • 加密時:Key中傳key變量. IV傳iv變量 。
    • 解密時:Key中傳 key變量 IV傳iv變量。
    • 加密時的key必須是同一個key 、IV向量也必須保持一致否則會報錯(可將key分別傳給Key和IV,就不會存在此問題)。
    • key值傳入的不同加密結果不同。
public string Des(string encryptString)
{
  DESCryptoServiceProvider des=new DESCryptoServiceProvider();
  
  byte[] sor = Encoding.UTF8.GetBytes(encryptString);
  //傳入key、iv
  des.Key = UTF8Encoding.UTF8.GetBytes(key);
  des.IV = UTF8Encoding.UTF8.GetBytes(iv);
  
  MemoryStream ms = new MemoryStream();
  CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
  
  cs.Write(sor, 0, sor.Length);
  cs.FlushFinalBlock();

  StringBuilder sb = new StringBuilder();
  foreach (byte b in ms.ToArray())
  {
  sb.AppendFormat("{0:X2}", b);
  }
  return sb.ToString();
}

 

幾個必要的對象:

    • DESCryptoServiceProvider 沒有它怎么des?
    • MemoryStream 存儲在內存的流對象
    • CryptoStream 定義將數據流鏈接到加密轉換流。通過它寫入MemoryStream對象當中
    • 最后轉換成String

 

 

解密:

public string DecryptString(string pToDecrypt)
{
  DESCryptoServiceProvider des = new DESCryptoServiceProvider();
  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
= UTF8Encoding.UTF8.GetBytes(key);//***************key與加密時的Key保持一致   des.IV = UTF8Encoding.UTF8.GetBytes(iv);//*****************skey與加密時的IV保持一致   MemoryStream ms = new MemoryStream();
  CryptoStream cs
= new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);   cs.Write(inputByteArray, 0, inputByteArray.Length);   cs.FlushFinalBlock();   StringBuilder ret = new StringBuilder();   return Encoding.UTF8.GetString(ms.ToArray()); }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM