【實(shí)例說明】
本例關(guān)鍵點(diǎn)是練習(xí)使用^的使用,沒有什么技術(shù)含量,大牛勿噴。呵呵。。
在介紹實(shí)例之前先來剪短了解一下加密的概念。
加密是指通過某種特殊的方法,更改已有信息的內(nèi)容,使得未授權(quán)的用戶即使得到了加密的信息,如果沒有正確解密的方法,那么也無法得到信息的內(nèi)容。
談到加密的話題,一些讀者朋友一定非常感興趣,而且會(huì)聯(lián)想到復(fù)雜的加密算法,本實(shí)例只是使用異或"^"運(yùn)算符簡單的實(shí)現(xiàn)對(duì)數(shù)字加密的功能。
【關(guān)鍵技術(shù)】
本實(shí)例實(shí)現(xiàn)時(shí)主要使用了“異或”運(yùn)算符對(duì)數(shù)字進(jìn)行“異或”運(yùn)算,達(dá)到簡單加密數(shù)字的目的,下面對(duì)其進(jìn)行詳細(xì)的講解:
本文主要使用的是加密數(shù)字,如果是文字等,可以將其轉(zhuǎn)換為byte、然后進(jìn)行加密后再轉(zhuǎn)回來,即可實(shí)現(xiàn)加密,解密的話將其轉(zhuǎn)為byte、計(jì)算后再轉(zhuǎn)回來即可。
很多簡單的注冊機(jī)既是使用PCId、硬盤ID等組合后加密實(shí)現(xiàn)的注冊碼。
“異或”運(yùn)算符"^"用于比較兩個(gè)二進(jìn)制數(shù)的相應(yīng)位。在執(zhí)行按位"異或"運(yùn)算是,如果兩個(gè)二進(jìn)制數(shù)的相應(yīng)位都為1或兩個(gè)二進(jìn)制數(shù)的相應(yīng)位都為0,則返回0;如果兩個(gè)二進(jìn)制數(shù)的相應(yīng)位其中一個(gè)為1另一個(gè)為0,則返回1。
現(xiàn)在來了解一下使用“異或”加密或解密的執(zhí)行過程,數(shù)值23轉(zhuǎn)換為二進(jìn)制位10111,加密數(shù)字的數(shù)值15轉(zhuǎn)換為1111.
對(duì)比兩個(gè)二進(jìn)制數(shù)的值,從右向左按位對(duì)比,如果兩個(gè)二進(jìn)制數(shù)的相應(yīng)位都為1或兩個(gè)二進(jìn)制數(shù)的相應(yīng)位都為0,則返回0,;如果兩個(gè)二進(jìn)制數(shù)的相應(yīng)位中一個(gè)為1,另一個(gè)為0,則返回1.
最后得到加密結(jié)果24于數(shù)字15進(jìn)行“異或”運(yùn)算,將24轉(zhuǎn)換二進(jìn)制為11000,將15轉(zhuǎn)換二進(jìn)制為1111,進(jìn)行“異或”運(yùn)算后,得到結(jié)果為23,這樣有還原了加密的數(shù)據(jù)。
【設(shè)計(jì)過程】
(1) 打開Visual Studio,新建Windows窗體應(yīng)用程序,命名為Encrypt。
(2)更改默認(rèn)窗體Form1的Name屬性為FrmEncrypt。窗體布局如下所示:
關(guān)鍵源碼如下:
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("請(qǐng)輸入數(shù)值!", "出現(xiàn)錯(cuò)誤:"); } } 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("請(qǐng)輸入數(shù)值!", "出現(xiàn)錯(cuò)誤:"); } } }}關(guān)鍵代碼
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注