【實例說明】 本例關鍵點是練習使用^的使用,沒有什麼技術含量,大牛勿噴。呵呵。。 在介紹實例之前先來剪短瞭解一下加密的概念。 加密是指通過某種特殊的方法,更改已有信息的內容,使得未授權的用戶即使得到了加密的信息,如果沒有正確解密的方法,那麼也無法得到信息的內容。 談到加密的話題,一些讀者朋友一定非常...
【實例說明】
本例關鍵點是練習使用^的使用,沒有什麼技術含量,大牛勿噴。呵呵。。
在介紹實例之前先來剪短瞭解一下加密的概念。
加密是指通過某種特殊的方法,更改已有信息的內容,使得未授權的用戶即使得到了加密的信息,如果沒有正確解密的方法,那麼也無法得到信息的內容。
談到加密的話題,一些讀者朋友一定非常感興趣,而且會聯想到複雜的加密演算法,本實例只是使用異或"^"運算符簡單的實現對數字加密的功能。
【關鍵技術】
本實例實現時主要使用了“異或”運算符對數字進行“異或”運算,達到簡單加密數字的目的,下麵對其進行詳細的講解:
本文主要使用的是加密數字,如果是文字等,可以將其轉換為byte、然後進行加密後再轉回來,即可實現加密,解密的話將其轉為byte、計算後再轉回來即可。
很多簡單的註冊機既是使用PCId、硬碟ID等組合後加密實現的註冊碼。
“異或”運算符"^"用於比較兩個二進位數的相應位。在執行按位"異或"運算是,如果兩個二進位數的相應位都為1或兩個二進位數的相應位都為0,則返回0;如果兩個二進位數的相應位其中一個為1另一個為0,則返回1。
現在來瞭解一下使用“異或”加密或解密的執行過程,數值23轉換為二進位位10111,加密數字的數值15轉換為1111.
對比兩個二進位數的值,從右向左按位對比,如果兩個二進位數的相應位都為1或兩個二進位數的相應位都為0,則返回0,;如果兩個二進位數的相應位中一個為1,另一個為0,則返回1.
最後得到加密結果24於數字15進行“異或”運算,將24轉換二進位為11000,將15轉換二進位為1111,進行“異或”運算後,得到結果為23,這樣有還原了加密的數據。
【設計過程】
(1) 打開Visual Studio,新建Windows窗體應用程式,命名為Encrypt。
(2)更改預設窗體Form1的Name屬性為FrmEncrypt。窗體佈局如下所示:
關鍵源碼如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Encrypt { public partial class FrmEncrypt : Form { public FrmEncrypt() { InitializeComponent(); } private void btn_Encrypt_Ok_Click(object sender, EventArgs e) { int P_int_Num, P_int_Key; if (int.TryParse(this.txt_Num.Text, out P_int_Num) && int.TryParse(this.txt_Key.Text, out P_int_Key)) { this.txt_Encrypt_1.Text = this.txt_Encrypt_2.Text = (P_int_Num ^ P_int_Key).ToString(); } else { MessageBox.Show("請輸入數值!", "出現錯誤:"); } } private void btn_Revert_Ok_Click(object sender, EventArgs e) { int P_int_Key, P_int_Encrypt; if (int.TryParse(this.txt_Encrypt_2.Text, out P_int_Key) && int.TryParse(this.txt_Key.Text, out P_int_Encrypt)) { this.txt_Revert.Text = (P_int_Encrypt ^ P_int_Key).ToString(); } else { MessageBox.Show("請輸入數值!", "出現錯誤:"); } } } } 關鍵代碼