[精讚] [會員登入]
216

加密解密(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

你可能感興趣的文章

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

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

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

我有話要說

>>

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

訪客留言

[無留言]

隨機好文

[VB.NET] ComboBox 使用For迴圈移除項目 ComboBox 使用For迴圈移除項目,看起來很簡單,實際上會遇到什麼問題呢

[jQuery] 動態設定欄位是否啟用 $符號真的太萬用了~ 抓取元件變得輕鬆許多

[理財筆記] 甚麼是造市商? 用處是甚麼? 造市商看起來有點難懂,我自己是用"遊戲王卡"來解釋

[寶可夢朱紫] 道館挑戰紀錄 揮指道館 https://www.youtube.com/watch?v=P11nEMPjrGU&t=2388s

[日文助詞] の的妙用 「の」不就是「的」,還能有其他用法?