c#AES加密解密
AES是一個對稱密碼,旨在取代DES成為廣泛使用的標準。密碼學(xué)中的高級加密標準(Advanced?Encryption?Standard,AES),又稱Rijndael加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標準。這個標準用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。
AES加密數(shù)據(jù)塊分組長度必須為128比特,密鑰長度可以是128比特、192比特、256比特中的任意一個(如果數(shù)據(jù)塊及密鑰長度不足時,會補齊)。AES加密有很多輪的重復(fù)和變換。大致步驟如下:1、密鑰擴展(KeyExpansion),2、初始輪(Initial Round),3、重復(fù)輪(Rounds),每一輪又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最終輪(Final Round),最終輪沒有MixColumns。
注:經(jīng)過個人測試,同一個字符串在不同設(shè)備,地域解密,加密是不一樣的,必須加密和解密的秘鑰要是一樣的,才能解密成功;
下面我們就來學(xué)習一下C#里如何利用AES加密解密
其實AES加解密的代碼大都一致,可以從網(wǎng)上復(fù)制過來直接調(diào)用的
1.創(chuàng)建一個web窗體Form1.cs來測試
如:
后臺代碼:
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加密解密 {public partial class Form1 : Form{public Form1(){InitializeComponent();}/// <summary> /// AES加密 /// </summary> /// <param name="encryptStr">明文</param> /// <param name="key">密鑰</param> /// <returns></returns> public static string Encrypt(string encryptStr, string key){byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr);RijndaelManaged rDel = new RijndaelManaged();rDel.Key = keyArray;rDel.Mode = CipherMode.ECB;rDel.Padding = PaddingMode.PKCS7;ICryptoTransform cTransform = rDel.CreateEncryptor();byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return Convert.ToBase64String(resultArray, 0, resultArray.Length);}//ToBase64String的秘鑰為32位/// <summary> /// AES解密 /// </summary> /// <param name="decryptStr">密文</param> /// <param name="key">密鑰</param> /// <returns></returns> internal static string Decrypt(string decryptStr, string key){byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);byte[] toEncryptArray = Convert.FromBase64String(decryptStr);RijndaelManaged rDel = new RijndaelManaged();rDel.Key = keyArray;rDel.Mode = CipherMode.ECB;rDel.Padding = PaddingMode.PKCS7;ICryptoTransform cTransform = rDel.CreateDecryptor();byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);return UTF8Encoding.UTF8.GetString(resultArray);}private void button1_Click(object sender, EventArgs e){//加密richTextBox1.Text =Encrypt(textBox1.Text,"12345678901234567890123456789012");//AES256加密要32位鍵值}//秘鑰位數(shù)不對也不能加解密成功private void button2_Click(object sender, EventArgs e){//解密richTextBox2.Text = Decrypt(richTextBox1.Text, "12345678901234567890123456789012");//(密文,秘鑰) }private void Form1_Load(object sender, EventArgs e){}} }?
2.運行結(jié)果
3.當你把解密后的字符串拿到網(wǎng)上在線解密時,誒呀,不一樣
加密在一定程度上保證了你數(shù)據(jù)的安全
加密有對稱加密和不對稱加密,對稱加密一般有兩個秘鑰,一個為公鑰就是大家都知道的,一個為私鑰只有自己知道。
?
轉(zhuǎn)載于:https://www.cnblogs.com/kalezhangtao/p/9085308.html
總結(jié)
- 上一篇: 网盘纷退场 “云存储”仍是刚需
- 下一篇: 多图片立体旋转效果