DES加密解密

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

加密:ide

  首先咱們先定義好key和ivui

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();
}

 

幾個必要的對象:spa

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

 

 

解密:3d

 

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()); }

相關文章
相關標籤/搜索