.NET中的密碼學--對稱加密
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Security.Cryptography;
using System.IO;
namespace WindowsApplication5
{
///
/// Form1 的摘要說明。
///
public class Form1 : System.Windows.Forms.Form.
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox txtData;
///
/// 必需的設計器變數。
///
private System.ComponentModel.Container components = null;
public Form1()
{
//
// Windows 窗體設計器支援所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 呼叫後新增任何建構函式程式碼
//
}
///
/// 清理所有正在使用的資源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗體設計器生成的程式碼
///
/// 設計器支援所需的方法 - 不要使用程式碼編輯器修改
/// 此方法的內容。
///
private void InitializeComponent()
{
this.button1 = new System.Windows.Forms.Button();
this.txtData = new System.Windows.Forms.TextBox();
this.SuspendLayout();
//
// button1
//
this.button1.Location = new System.Drawing.Point(64, 168);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(80, 48);
this.button1.TabIndex = 0;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// txtData
//
this.txtData.Location = new System.Drawing.Point(56, 64);
this.txtData.Name = "txtData";
this.txtData.TabIndex = 1;
this.txtData.Text = "";
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(292, 273);
this.Controls.Add(this.txtData);
this.Controls.Add(this.button1);
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);
}
#endregion
///
/// 應用程式的主入口點。
///
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
private void button1_Click(object sender, System.EventArgs e)
{
SymmetricAlgorithm mCryptProv;
MemoryStream mMemStr;
// 加密txtData中的資料,然後將加密結果用MessageBox顯示並且回寫到TextBox中
// 這裡你可以配置任何.NET支援的類
mCryptProv = SymmetricAlgorithm.Create("Rijndael");
// 加密資料將要以流的形式儲存在記憶體中因此我們需要記憶體Stream物件
mMemStr = new MemoryStream();
//建立ICryptToransform物件.(在這裡我們使用預設的金鑰和初始向量).
ICryptoTransform mTransform = mCryptProv.CreateEncryptor();
CryptoStream mCSWriter = new CryptoStream(mMemStr,mTransform,CryptoStreamMode.Write);
StreamWriter mSWriter = new StreamWriter(mCSWriter);
mSWriter.Write(this.txtData.Text);
mSWriter.Flush();
mCSWriter.FlushFinalBlock();
// 有一件事情在這裡需要注意我們沒有在程式碼的任何地方使用IV和金鑰。事實上,在我們在程式碼裡面沒有指定他們的時候.NET Framework將為我們自動產生。但是本文包含的例子程式碼使用的是使用者指定的金鑰和IV。我們將加密以後的資料使用MemoryStream寫到記憶體中。現在讓我們從記憶體中得到資料的程式碼。
//資料已經寫入記憶體但是我們需要回顯它到TextBox和MessageBox中,因此要做下面的工作。
//為接受資料建立位元組陣列。
byte[] mBytes = new byte[mMemStr.Length - 1];
mMemStr.Position = 0;
mMemStr.Read(mBytes,0,mBytes.Length);
String mEncData = System.Text.Encoding.UTF8.GetString(mBytes);
MessageBox.Show("加密資料為:\n"+mEncData);
this.txtData.Text = mEncData;
// 從位元組轉換為字串必須要編碼。在這裡我使用了UTF8Encoding。最後,讓我們將解密後的資料再次顯示在MessageBox和TextBox中。
//
// 現在讓我們從記憶體中得到解密後的資料
//
// 因為我們的資料在記憶體中,所以我們需要重新使用MemoryStream物件。
//
// 將記憶體點置0
mMemStr.Position = 0;
mTransform = mCryptProv.CreateDecryptor();
CryptoStream mCSReader = new CryptoStream(mMemStr,mTransform,CryptoStreamMode.Read);
StreamReader mStrReader = new StreamReader(mCSReader);
String mDecData = mStrReader.ReadToEnd();
MessageBox.Show("解密資料為:\n"+mDecData);
this.txtData.Text = mDecData;
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-545021/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 密碼學之對稱加密密碼學加密
- golang 密碼學-1. 對稱加密Golang密碼學加密
- golang 密碼學-2. 非對稱加密Golang密碼學加密
- 【Java小工匠聊密碼學】–對稱加密–概述Java密碼學加密
- https中的對稱加密和非對稱加密HTTP加密
- 編碼與加密(對稱加密與非對稱加密)加密
- golang 中,對稱加密的程式碼實現Golang加密
- 對稱加密與非對稱加密加密
- 對稱與非對稱密碼體制密碼
- 資料加密(對稱加密和非對稱加密)加密
- 聊聊對稱/非對稱加密在HTTPS中的應用加密HTTP
- 對稱加密、非對稱加密、RSA(總結)加密
- 寫給開發人員的實用密碼學(六)—— 對稱金鑰加密演算法密碼學加密演算法
- golang 中,非對稱加密的實現Golang加密
- 對稱加密和非對稱加密(一)初步理解加密
- C#對稱加密(AES加密)每次生成的密文結果不同思路程式碼分享C#加密
- 加密原理詳解:對稱式加密VS非對稱式加密加密
- Linux系統中對稱加密和非對稱加密區別是什麼?Linux加密
- 寫給開發人員的實用密碼學(七)—— 非對稱金鑰加密演算法 RSA/ECC密碼學加密演算法
- Android 安全加密:對稱加密Android加密
- Android安全加密:對稱加密Android加密
- RSA加密原理&密碼學&HASH加密密碼學
- Java安全之對稱加密、非對稱加密、數字簽名Java加密
- 密碼學系列之:加密貨幣中的scrypt演算法密碼學加密演算法
- 對稱加密體系加密
- 前端使用bcrypt對密碼加密,伺服器對密碼進行校驗前端密碼加密伺服器
- 非對稱加密中,加解密和簽名加密解密
- Android 安全加密:非對稱加密Android加密
- Android安全加密:非對稱加密Android加密
- 《密碼學系列》|| 密碼學中的流密碼是怎麼回事?密碼學
- 密碼學系列之:blowfish對稱金鑰分組演算法密碼學演算法
- 密碼學系列之:twofish對稱金鑰分組演算法密碼學演算法
- 對稱、非對稱的加密技術是如何對網站資料進行雙重加密?加密網站
- 非對稱加密體系加密
- RSA 非對稱加密&解密加密解密
- 非對稱加密與OpenSSL加密
- ssh與非對稱加密加密
- DES對稱資料加密加密