欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用C#實現(xiàn)AES加密與解密的示例

 更新時間:2024年12月01日 08:30:25   作者:數(shù)據(jù)的世界01  
在現(xiàn)代應(yīng)用程序中,數(shù)據(jù)加密是保護敏感信息安全的重要手段,AES(高級加密標準)是一種廣泛使用的對稱加密算法,提供強大的數(shù)據(jù)保護功能,今天,我將為大家展示如何使用 C# 實現(xiàn) AES 加密和解密,需要的朋友可以參考下

1. AES 加密簡介

AES(Advanced Encryption Standard,高級加密標準)是一種對稱加密算法,意味著加密和解密使用相同的密鑰。AES 支持不同的密鑰長度,如 128 位、192 位和 256 位。為了簡便起見,本文將使用 128 位密鑰(即 16 字節(jié))進行加密。

2. C# 中的 AES 加密與解密

在 C# 中,System.Security.Cryptography 命名空間提供了內(nèi)置的 AES 加密支持。通過 Aes 類,我們可以輕松實現(xiàn)加密和解密操作。以下是一個完整的示例代碼,展示了如何在 C# 中進行 AES 加密和解密。

    class Program
    {
        private static string key = "1234567890123456"; // 16字節(jié)密鑰,AES-128
        private static string iv = "1234567890123456";  // 16字節(jié)IV(初始化向量)
 
        // 加密函數(shù)
        public static string Encrypt(string plainText)
        {
            using (Aes aesAlg = Aes.Create()) // 創(chuàng)建AES加密實例
            {
                aesAlg.Key = Encoding.UTF8.GetBytes(key);  // 設(shè)置密鑰
                aesAlg.IV = Encoding.UTF8.GetBytes(iv);    // 設(shè)置初始化向量
 
                ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV); // 創(chuàng)建加密器
 
                using (MemoryStream msEncrypt = new MemoryStream())  // 用于存儲加密后的數(shù)據(jù)
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))  // 創(chuàng)建加密數(shù)據(jù)流
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))  // 寫入加密流
                        {
                            swEncrypt.Write(plainText);  // 寫入明文數(shù)據(jù)
                        }
                    }
                    // 返回加密后的數(shù)據(jù),轉(zhuǎn)換為Base64字符串
                    return Convert.ToBase64String(msEncrypt.ToArray());
                }
            }
        }
 
        // 解密函數(shù)
        public static string Decrypt(string cipherText)
        {
            using (Aes aesAlg = Aes.Create()) // 創(chuàng)建AES實例
            {
                aesAlg.Key = Encoding.UTF8.GetBytes(key);  // 設(shè)置密鑰
                aesAlg.IV = Encoding.UTF8.GetBytes(iv);    // 設(shè)置初始化向量
 
                ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);  // 創(chuàng)建解密器
 
                using (MemoryStream msDecrypt = new MemoryStream(Convert.FromBase64String(cipherText)))  // 將Base64字符串轉(zhuǎn)換為字節(jié)數(shù)組并讀取
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))  // 創(chuàng)建解密數(shù)據(jù)流
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))  // 從解密流中讀取數(shù)據(jù)
                        {
                            return srDecrypt.ReadToEnd();  // 返回解密后的明文
                        }
                    }
                }
            }
        }
        static void Main(string[] args)
        {
            string originalText = "Hello, AES Encryption!";  // 原始明文
            Console.WriteLine("Original Text: " + originalText);  // 輸出原始文本
 
            string encryptedText = Encrypt(originalText);  // 加密
            Console.WriteLine("Encrypted Text: " + encryptedText);  // 輸出加密后的文本
 
            string decryptedText = Decrypt(encryptedText);  // 解密
            Console.WriteLine("Decrypted Text: " + decryptedText);  // 輸出解密后的文本
 
            Console.ReadKey();
        }
    }

3. 代碼詳解

  1. 密鑰和初始化向量(IV)

    • 在 AES 加密中,密鑰長度和初始化向量(IV)的長度非常重要。這里使用了 16 字節(jié)的密鑰(128 位),也使用了 16 字節(jié)的 IV。這是 AES-128 加密所需的標準設(shè)置。
  2. 加密過程

    • 使用 Aes.Create() 創(chuàng)建 AES 實例。
    • 設(shè)置密鑰 (Key) 和初始化向量 (IV)。
    • 使用 CreateEncryptor 創(chuàng)建加密器,接著通過 CryptoStream 和 MemoryStream 實現(xiàn)數(shù)據(jù)流的加密。
    • 最終將加密后的字節(jié)流轉(zhuǎn)換為 Base64 字符串,方便以文本形式存儲或傳輸。
  3. 解密過程

    • 解密過程與加密過程相反。我們使用相同的密鑰和 IV,通過 CreateDecryptor 解密數(shù)據(jù)流,最終恢復原始文本。

4. 示例輸出

假設(shè)我們加密并解密一段文本 "Hello, AES Encryption!",輸出將如下所示:

Original Text: Hello, AES Encryption!
Encrypted Text: P5/fGFh/sUsYOGYOg7wDIA==
Decrypted Text: Hello, AES Encryption!

可以看到,原始文本被成功加密并轉(zhuǎn)換為一個 Base64 編碼的字符串,然后又解密回原始的明文。

5. 安全注意事項

在實際應(yīng)用中,密鑰和初始化向量的生成應(yīng)該更為復雜且具有隨機性,以提高加密的安全性。避免使用固定的密鑰和 IV,尤其是在生產(chǎn)環(huán)境中。

例如,可以使用 RNGCryptoServiceProvider 來生成一個隨機的密鑰和 IV,而不是手動指定它們。這樣可以增強加密的強度,確保每次加密都具有獨一無二的安全性。

6. 結(jié)語

通過上述示例,我們學習了如何使用 C# 實現(xiàn) AES 加密和解密。AES 是一種高效且安全的對稱加密算法,廣泛應(yīng)用于各類數(shù)據(jù)保護和信息安全場景。掌握它的實現(xiàn),能幫助我們在開發(fā)中保護敏感數(shù)據(jù),確保應(yīng)用程序的安全性。

到此這篇關(guān)于使用C#實現(xiàn)AES加密與解密的示例的文章就介紹到這了,更多相關(guān)C# AES加密與解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#自定義類型強制轉(zhuǎn)換實例分析

    C#自定義類型強制轉(zhuǎn)換實例分析

    這篇文章主要介紹了C#自定義類型強制轉(zhuǎn)換的方法,實例分析了C#類型轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • C#實現(xiàn)win10 uwp 右擊浮出窗在點擊位置

    C#實現(xiàn)win10 uwp 右擊浮出窗在點擊位置

    本文主要讓MenuFlyout出現(xiàn)在我們右擊位置。我們建一個ListView,然后綁定后臺,在我們ListView要右擊顯示我們的浮出,要求我們的浮出在我們點擊位置
    2016-10-10
  • C#基于正則表達式抓取a標簽鏈接和innerhtml的方法

    C#基于正則表達式抓取a標簽鏈接和innerhtml的方法

    這篇文章主要介紹了C#基于正則表達式抓取a標簽鏈接和innerhtml的方法,結(jié)合實例形式分析了C#使用正則表達式進行頁面元素的匹配與抓取相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • C#實現(xiàn)登錄窗口(不用隱藏)

    C#實現(xiàn)登錄窗口(不用隱藏)

    C#登錄窗口的實現(xiàn),特點就是不用隱藏,感興趣的朋友不要錯過
    2013-11-11
  • Unity shader實現(xiàn)頂點動畫波動效果

    Unity shader實現(xiàn)頂點動畫波動效果

    這篇文章主要為大家詳細介紹了Unity shader實現(xiàn)頂點動畫波動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#泛型詳解及關(guān)鍵字作用

    C#泛型詳解及關(guān)鍵字作用

    這篇文章主要來講講c#中的泛型,因為泛型在c#中有很重要的位置,對于寫出高可讀性,高性能的代碼有著關(guān)鍵的作用,大家都知道泛型公共語言運行庫是非常重要功能,那么為什么使用泛型呢,帶著這個問題一起通過本文學習下吧
    2021-08-08
  • 淺談C# 構(gòu)造方法(函數(shù))

    淺談C# 構(gòu)造方法(函數(shù))

    這篇文章主要介紹了C# 構(gòu)造方法(函數(shù))的的相關(guān)資料,文中講解非常詳細,幫助大家更好的學習C#,感興趣的朋友可以了解下
    2020-06-06
  • Quartz.Net使用方法詳解

    Quartz.Net使用方法詳解

    本文詳細講解了Quartz.Net的使用方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#資源釋放方法實例分析

    C#資源釋放方法實例分析

    這篇文章主要介紹了C#資源釋放方法,結(jié)合實例詳細分析了C#資源釋放的具體方法與相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • 基于C#實現(xiàn)簡單的音樂播放器

    基于C#實現(xiàn)簡單的音樂播放器

    這篇文章主要介紹了如何基于C#實現(xiàn)簡單的音樂播放器,考慮到需求中的界面友好和跨版本兼容性,我們可以選擇選擇Windows Forms作為開發(fā)平臺,Windows Forms提供了一個簡單而強大的方法來創(chuàng)建桌面應(yīng)用程序,文中通過代碼示例給大家講解的非常詳細,需要的朋友可以參考下
    2024-05-05

最新評論