[精讚] [會員登入]
204

加密解密(AES)、動態產生IV

加密解密(AES)、動態產生IV

分享此文連結 //n.sfs.tw/15827

分享連結 加密解密(AES)、動態產生IV@大塚 宏 ~認真玩・輕鬆學~
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-05-11 09:32:36 最後編修
2022-05-09 17:12:14 By 大塚 宏
 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AES_2
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = EncryptString(textBox1.Text, textBox3.Text);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = DecryptString(textBox2.Text, textBox3.Text);
        }

        public static string EncryptString(string message, string key)
        {
            key = Get_SHA256_Hash(key).Substring(0, 32);
            var keyBytes = Convert.FromBase64String(key);
            var aes = new AesCryptoServiceProvider();
            var iv = aes.IV;
            using (var memStream = new System.IO.MemoryStream())
            {
                memStream.Write(iv, 0, iv.Length);  // Add the IV to the first 16 bytes of the encrypted value
                using (var cryptStream = new CryptoStream(memStream, aes.CreateEncryptor(keyBytes, aes.IV), CryptoStreamMode.Write))
                {
                    using (var writer = new System.IO.StreamWriter(cryptStream))
                    {
                        writer.Write(message);
                    }
                }
                var buf = memStream.ToArray();
                return Convert.ToBase64String(buf, 0, buf.Length);
            }
        }

        public static string DecryptString(string encryptedValue, string key)
        {
            key = Get_SHA256_Hash(key).Substring(0, 32);
            var bytes = Convert.FromBase64String(encryptedValue);
            var keyBytes = Convert.FromBase64String(key);
            var aes = new AesCryptoServiceProvider();
            using (var memStream = new System.IO.MemoryStream(bytes))
            {
                var iv = new byte[16];
                memStream.Read(iv, 0, 16);  // Pull the IV from the first 16 bytes of the encrypted value
                using (var cryptStream = new CryptoStream(memStream, aes.CreateDecryptor(keyBytes, iv), CryptoStreamMode.Read))
                {
                    using (var reader = new System.IO.StreamReader(cryptStream))
                    {
                        return reader.ReadToEnd();
                    }
                }
            }
        }

        public static string Get_SHA256_Hash(string str)
        {
            byte[] sha256Bytes = Encoding.UTF8.GetBytes(str);
            SHA256Managed sha256 = new SHA256Managed();
            byte[] bytes = sha256.ComputeHash(sha256Bytes);
            return BitConverter.ToString(bytes).Replace("-", "").ToUpper();
        }
    }
}
 

END

你可能感興趣的文章

[C#] 字串加密後寫入圖片 字串加密後寫入圖片

[C#] 加密圖片,透過Logistic混沌演算法 加密圖片,透過Logistic混沌演算法

加密解密(AES)、動態產生IV 加密解密(AES)、動態產生IV

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

[VB.NET] 分治法+遞迴練習 12個硬幣中,有一個偽幣重量較輕(設為0),其他正常硬幣重量較重(設為1) 透過分治法+遞迴,找出偽幣的位置

[對戰筆記] 2022年 3月 第三回 [S28] 對戰札記,2022年 3月 第三回筆記

[實用程式] 假文產生器 遇到一個設計表單的工作,需要一些隨機文字來填充欄位,測試排版是否整齊

[雜記] 生平第一次上台發表論文 而我是第一次參加發表,所以是構想發表 研究題材是...研究加譯副詞「就」的日中翻譯(聽起來就很無聊) 我自己上台發表的人都心想,如果我在台下聽,應該快睡著了

寶可夢-朱紫感想 朱紫的道館館主們,絕大部分都是"兼職",沒有全職道館主 例如,普通系館主,是個普通的上班族 電系道館