DES加密解密

来源:https://www.cnblogs.com/zousc/archive/2019/07/02/11121104.html
-Advertisement-
Play Games

DES(Data Encryption Standard)的加密與MD5不同,DES可以解密,而MD5的加密是不可逆的;用於數字簽名和數據加密,對稱加密-即加密秘鑰和解密秘鑰相同。標準的DES密鑰長度為64bit,密鑰每個字元占7bit,外加1bit的奇偶校驗,64/(7+1)=8;所以必須是8個字 ...


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一直想瞭解python網路爬蟲方面的知識,苦於沒有小白方面的視頻教程,網路基本都是需要有一定基礎才可以學習的 這款由大講師平臺推出的教程,絕對是小白入門的不二之選 首先,這門課程循序漸進。從Python的基本語法函數開始介紹 並且留有獨立的作業,看完視頻教程獨立完成課後作業 鞏固練習 其次,這門課程 ...
  • 1. 自己用的番茄鐘自己做 在PC上我一直使用“小番茄”作為我的番茄鐘軟體,我把它打開後放在副顯示器最大化,這樣不僅可以讓它盡到本分,而且還可以告訴我的同事“我正在專心工作”。可是我總是嫌棄它的手感不夠愉悅,總想自己寫一個番茄鐘軟體,正好最近很久沒寫UWP應用了很手癢,於是就抽空寫了個自用的番茄鐘並 ...
  • 本文包括兩個部分: WebApi中使用swagger 項目打開之後,選擇 引用,右鍵,管理NuGet程式包 瀏覽,搜索swagger,選擇第一個swashbuckle,安裝 安裝好之後,右鍵項目,選擇屬性,生成,在下麵的輸出那裡勾選:XML文檔文件,如果沒有自動填充好路徑,需要自己填寫一下,文件名可 ...
  • ARR是應用級別的負載均衡方案,ARR只能做請求入口的分發服務,而NLB則是伺服器級別的負載均衡方案。我們將二者結合起來,形成高可用最佳方案。 ...
  • C#中的這個幾個關鍵字:explicit、implicit與operator,估計好多人的用不上,什麼情況,這是什麼?字面解釋:explicit:清楚明白的;易於理解的;(說話)清晰的,明確的;直言的;坦率的;直截了當的;不隱晦的;不含糊的。implicit:含蓄的;不直接言明的;成為一部分的;內含 ...
  • 使用ItemContainerGenerator.ContainerFromItem方法可以獲取對應數據的UIElement 。 但是如果使用了虛擬化技術,超出可見區域的UIElement就獲取不到了。 參考微軟的文檔《如何:在 TreeView 中查找 TreeViewItem》,去掉一些不必要的 ...
  • 本文分別說明.NET CORE與Spring Boot 編寫控制台程式應有的“正確”方法,以便.NET程式員、JAVA程式員可以相互學習與加深瞭解,註意本文只介紹用法,不會刻意強調哪種語言或哪種框架寫的控制台程式要好。 本文所說的編寫控制台程式應有的“正確”方法,我把正確二字加上引號,因為沒有絕對的 ...
  • C# 單例模式 1、定義:單例模式就是保證在整個應用程式的生命周期中,在任何時刻,被指定的類只有一個實例,併為客戶程式提供一個獲取該實例的全局訪問點。 2、單例模式的優點有: (1)實例控制:單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。 (2)靈活性:因為類控 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...