.Net中對稱加密的實現

常見對稱加密算法及優缺點

1. DES(Data Encryption Standard)

  • 優點:是最早被廣泛應用的加密算法,算法公開,實現簡單,效率較高。
  • 缺點:密鑰長度較短(56 位),在現代計算能力下,安全性較低,容易被暴力破解。

2. 3DES(Triple DES)

  • 優點:在 DES 的基礎上進行了改進,通過多次使用 DES 算法,增加了密鑰長度,提高了安全性。
  • 缺點:由于多次使用 DES 算法,加密和解密速度相對較慢。

3. AES(Advanced Encryption Standard)

  • 優點:是目前應用最廣泛的對稱加密算法,密鑰長度可選(128 位、192 位、256 位),安全性高,加密和解密速度快。
  • 缺點:相對來說,算法復雜度較高,實現難度較大。

示例代碼

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;class SymmetricEncryption
{// DES 加密public static string DESEncrypt(string plainText, string key){using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()){byte[] inputBytes = Encoding.UTF8.GetBytes(plainText);byte[] keyBytes = Encoding.UTF8.GetBytes(key);byte[] encryptedBytes;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(keyBytes, keyBytes), CryptoStreamMode.Write)){cs.Write(inputBytes, 0, inputBytes.Length);cs.FlushFinalBlock();encryptedBytes = ms.ToArray();}}return Convert.ToBase64String(encryptedBytes);}}// DES 解密public static string DESDecrypt(string cipherText, string key){using (DESCryptoServiceProvider des = new DESCryptoServiceProvider()){byte[] inputBytes = Convert.FromBase64String(cipherText);byte[] keyBytes = Encoding.UTF8.GetBytes(key);byte[] decryptedBytes;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(keyBytes, keyBytes), CryptoStreamMode.Write)){cs.Write(inputBytes, 0, inputBytes.Length);cs.FlushFinalBlock();decryptedBytes = ms.ToArray();}}return Encoding.UTF8.GetString(decryptedBytes);}}// 3DES 加密public static string TripleDESEncrypt(string plainText, string key){using (TripleDESCryptoServiceProvider tripleDes = new TripleDESCryptoServiceProvider()){byte[] inputBytes = Encoding.UTF8.GetBytes(plainText);byte[] keyBytes = Encoding.UTF8.GetBytes(key);byte[] encryptedBytes;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, tripleDes.CreateEncryptor(keyBytes, keyBytes), CryptoStreamMode.Write)){cs.Write(inputBytes, 0, inputBytes.Length);cs.FlushFinalBlock();encryptedBytes = ms.ToArray();}}return Convert.ToBase64String(encryptedBytes);}}// 3DES 解密public static string TripleDESDecrypt(string cipherText, string key){using (TripleDESCryptoServiceProvider tripleDes = new TripleDESCryptoServiceProvider()){byte[] inputBytes = Convert.FromBase64String(cipherText);byte[] keyBytes = Encoding.UTF8.GetBytes(key);byte[] decryptedBytes;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, tripleDes.CreateDecryptor(keyBytes, keyBytes), CryptoStreamMode.Write)){cs.Write(inputBytes, 0, inputBytes.Length);cs.FlushFinalBlock();decryptedBytes = ms.ToArray();}}return Encoding.UTF8.GetString(decryptedBytes);}}// AES 加密public static string AESEncrypt(string plainText, string key){using (Aes aesAlg = Aes.Create()){byte[] inputBytes = Encoding.UTF8.GetBytes(plainText);byte[] keyBytes = Encoding.UTF8.GetBytes(key);aesAlg.Key = keyBytes;aesAlg.GenerateIV();byte[] encryptedBytes;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV), CryptoStreamMode.Write)){cs.Write(inputBytes, 0, inputBytes.Length);cs.FlushFinalBlock();encryptedBytes = ms.ToArray();}byte[] combinedBytes = new byte[aesAlg.IV.Length + encryptedBytes.Length];Array.Copy(aesAlg.IV, 0, combinedBytes, 0, aesAlg.IV.Length);Array.Copy(encryptedBytes, 0, combinedBytes, aesAlg.IV.Length, encryptedBytes.Length);return Convert.ToBase64String(combinedBytes);}}}// AES 解密public static string AESDecrypt(string cipherText, string key){byte[] combinedBytes = Convert.FromBase64String(cipherText);byte[] iv = new byte[16];byte[] encryptedBytes = new byte[combinedBytes.Length - iv.Length];Array.Copy(combinedBytes, 0, iv, 0, iv.Length);Array.Copy(combinedBytes, iv.Length, encryptedBytes, 0, encryptedBytes.Length);using (Aes aesAlg = Aes.Create()){byte[] keyBytes = Encoding.UTF8.GetBytes(key);aesAlg.Key = keyBytes;aesAlg.IV = iv;byte[] decryptedBytes;using (MemoryStream ms = new MemoryStream()){using (CryptoStream cs = new CryptoStream(ms, aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV), CryptoStreamMode.Write)){cs.Write(encryptedBytes, 0, encryptedBytes.Length);cs.FlushFinalBlock();decryptedBytes = ms.ToArray();}}return Encoding.UTF8.GetString(decryptedBytes);}}static void Main(){string plainText = "Hello, World!";string desKey = "abcdefgh"; // DES 密鑰長度必須為 8 字節string tripleDesKey = "abcdefghijklmnopqrstuvwx"; // 3DES 密鑰長度必須為 24 字節string aesKey = "abcdefghijklmnop"; // AES 密鑰長度可以為 16、24 或 32 字節// DES 加密和解密string desCipherText = DESEncrypt(plainText, desKey);string desDecryptedText = DESDecrypt(desCipherText, desKey);Console.WriteLine($"DES 加密結果: {desCipherText}");Console.WriteLine($"DES 解密結果: {desDecryptedText}");// 3DES 加密和解密string tripleDesCipherText = TripleDESEncrypt(plainText, tripleDesKey);string tripleDesDecryptedText = TripleDESDecrypt(tripleDesCipherText, tripleDesKey);Console.WriteLine($"3DES 加密結果: {tripleDesCipherText}");Console.WriteLine($"3DES 解密結果: {tripleDesDecryptedText}");// AES 加密和解密string aesCipherText = AESEncrypt(plainText, aesKey);string aesDecryptedText = AESDecrypt(aesCipherText, aesKey);Console.WriteLine($"AES 加密結果: {aesCipherText}");Console.WriteLine($"AES 解密結果: {aesDecryptedText}");}
}    

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/899782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899782.shtml
英文地址,請注明出處:http://en.pswp.cn/news/899782.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQLMesh調度系統深度解析:內置調度與Airflow集成實踐

本文系統解析SQLMesh的兩種核心調度方案:內置調度器與Apache Airflow集成。通過對比兩者的適用場景、架構設計和操作流程,為企業構建可靠的數據分析流水線提供技術參考。重點內容包括: 內置調度器的輕量級部署與性能優化策略Airflow集成的端到…

centos線程數查看

查看當前最大支持的線程數 cat /proc/sys/kernel/threads-max當前用戶進程可以創建的最大線程數(包括子進程) [rootlocalhost tmp]# ulimit -u得到當前實際的線程數 [rootlocalhost tmp]# ps -eLf | wc -l統計每個進程的總線程數前20的數據 [rootloc…

【大模型】視覺語言模型:Qwen2.5-VL的使用

官方github地址:https://github.com/QwenLM/Qwen2.5-VL 目錄 Qwen家族的最新成員:Qwen2.5-VL 主要增強功能 模型架構更新 快速開始 使用Transformers聊天 Docker Qwen家族的最新成員:Qwen2.5-VL 主要增強功能 強大的文檔解析功能&am…

HDMI接口設計

1. HDMI簡介 HDMI(High Definition Multimedia Interface)高清多媒體接口,是首個支持在單線纜上傳輸,不經過壓縮的全數字高清晰度、多聲道音頻和智能格式與控制命令數據的數字接口。這個接口可以同時傳輸視頻信號、音頻信號和控制信號。 從上圖里面可以看到HDMI有3組數據信號…

C/C++ JSON 庫綜合對比及應用案例(六)

第六部分:C/C JSON 庫綜合對比及應用案例 📢 快速掌握 JSON!文章 視頻雙管齊下 🚀 如果你覺得閱讀文章太慢,或者更喜歡 邊看邊學 的方式,不妨直接觀看我錄制的 JSON 課程視頻!🎬 …

LXC 導入(Rockylinux,almalinux,oraclelunx,debian,ubuntu,openEuler,kail,opensuse)

前提要求 ubuntu下安裝lxd 參考Rockylinux下安裝lxd 參考LXC 源替換參考LXC 容器端口發布參考LXC webui 管理<

Spring MVC 頁面跳轉方案與區別

SpringMVC 的頁面跳轉方案主要分為 ?轉發&#xff08;Forward&#xff09;? 和 ?重定向&#xff08;Redirect&#xff09;? 兩類&#xff0c;具體實現方式和區別如下&#xff1a; 一、頁面跳轉方案 1. ?轉發&#xff08;Forward&#xff09;? 默認方式?&#xff1a;直…

基于Spring Boot的輕型卡車零部件銷售平臺的設計與實現(LW+源碼+講解)

專注于大學生項目實戰開發,講解,畢業答疑輔導&#xff0c;歡迎高校老師/同行前輩交流合作?。 技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;…

高性能計算面經

高性能計算面經 C八股文真景一面涼經自我介紹&#xff0c;介紹一下你做過的加速的模塊(疊噪&#xff0c;噪聲跟原圖有什么關系&#xff1f;)OpenGL和OpenCL有什么區別&#xff1f;**1. 核心用途****2. 編程模型****3. 硬件抽象****4. API設計****5. 典型應用場景****6. 互操作性…

青少年編程與數學 02-014 高中數學知識點 07課題、專業相關性分析

青少年編程與數學 02-014 高中數學知識點 07課題、專業相關性分析 一、函數與微積分1. 函數與初等函數2. 導數與優化 二、概率與統計1. 概率基礎2. 統計推斷3. 隨機變量與分布 三、幾何與代數1. 向量與矩陣運算2. 復數與坐標變換 四、數學建模與算法思維1. 數學建模2. 算法邏輯…

11亂碼問題的解釋(2)

這個字符串使用哪種方式編碼的?---看包含在哪個文件中 和當前 mylabel.cpp 文件的編碼方式是一致的~~ 如果這里顯示的是 UTF-8&#xff0c;說明這個文件就是UTF-8 編碼 如果顯示的是 ANSI,說明這個文件就是 GBK 編碼~ Qt Creator 內置的終端是 utf8 的方式來顯示字符串嗎?? …

我的機器學習學習之路

學習python的初衷 ? hi&#xff0c;今天給朋友們分享一下我是怎么從0基礎開始學習機器學習的。 ? 我是2023年9月開始下定決心要學python的&#xff0c;目的有兩個&#xff0c;一是為了提升自己的技能和價值&#xff0c;二是將所學的知識應用到工作中去&#xff0c;提升工作…

27--當路由器學會“防狼術“:華為設備管理面安全深度解剖(完整戰備版)

當路由器學會"防狼術"&#xff1a;華為設備管理面安全深度解剖&#xff08;完整戰備版&#xff09; 引言&#xff1a;網絡世界的"門神"進化論 “從前有個路由器&#xff0c;它把所有數據包都當好人&#xff0c;直到有一天…” ——《悲慘世界網絡版》 如果…

Docker容器網絡相關設置

確認容器是否正確啟動 首先&#xff0c;確保 MySQL 容器正在運行。可以使用 docker ps 查看當前正在運行的容器。如果 MySQL 容器沒有啟動&#xff0c;可以嘗試以下命令啟動它&#xff1a; docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORDrootpassword mysql:8 這…

hive相關面試題以及答案

什么是Hive&#xff1f;它的作用是什么&#xff1f; 答&#xff1a;Hive是一個建立在Hadoop之上的數據倉庫工具&#xff0c;它提供了類似于SQL的查詢語言HiveQL來操作存儲在Hadoop中的數據。Hive的主要作用是讓用戶能夠使用SQL語法來查詢和分析大規模數據集。 Hive的架構是什么…

前端學習記錄之HTML

1. 網頁 1.1 什么是網頁 網站是指在因特網上根據一定的規則&#xff0c;使用HTML等制作的用于展示特定內容相關的網頁集合。 網頁是網站中的一“頁”&#xff0c;通常是HTML格式的文件&#xff0c;它要通過瀏覽器來閱讀 網頁是構成網站的基本元素。它通常由圖片&#xff0c;…

【1-1】ICT=IT+CT

前言 從這篇文章開始&#xff0c;我將總結軟考網工相關的筆記和自己的所思所想。我所總結內容均來自互聯網&#xff0c;歡迎大家交流、學習、討論。 1. ICT ICT IT CT 這里&#xff0c;這三個縮寫的對應英文如下&#xff1a; 縮寫英文含義ICTInformation and Communicat…

多賬號安全登錄與瀏覽器指紋管理的實現方案

隨著跨境電商、社交媒體運營等場景的普及&#xff0c;用戶對多賬號管理與反檢測技術的需求日益增長。指紋瀏覽器作為一款專注于多賬號安全登錄與瀏覽器指紋管理的工具&#xff0c;通過虛擬瀏覽器環境隔離、動態指紋模擬等技術&#xff0c;解決了賬號關聯封禁的痛點。本文將從技…

CMake Presets教程

在使用 CMake 作為構建工具的時候, 對于一個稍微大一點的項目, 存在有很多的選項. 比如 Debug 版本還是 Release 版本, 是否開啟特定選項, 是否開啟測試等等. 這些通常是作為命令行參數傳遞進去的. 但是很多程序員并不在命令行中作開發, 更多的是使用 IDE 來進行開發. 不同的 I…

vue搭建一個樹形菜單項目

首先搭建項目需要先通過步驟搭建一個vue的項目&#xff0c;然后創建一個component文件&#xff0c;里面新建一個index.vue頁面來。 這是引入的element-ui組件庫里的組件&#xff0c;來實現我的路由&#xff0c;渲染的是我存儲的動態路由&#xff0c;所以需要先安裝并且引用。 …