日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

PHP+MySQL應(yīng)用中使用XOR運(yùn)算加密算法

瀏覽:36日期:2024-02-09 14:47:46

本文將介紹一個(gè)簡(jiǎn)單易用的加密/解密算法:使用異或(XOR)運(yùn)算。本算法原理簡(jiǎn)單,旨在使讀者對(duì)信息的加密/解密有一個(gè)更加直觀的印象。

XOR算法原理

從加密的主要方法看,換位法過于簡(jiǎn)單,特別是對(duì)于數(shù)據(jù)量少的情況很容易由密文猜出明文,而替換法不失為一種行之有效的簡(jiǎn)易算法。

從各種替換法運(yùn)算的特點(diǎn)看,異或運(yùn)算最適合用于簡(jiǎn)易加解密運(yùn)算,這種方法的原理是:當(dāng)一個(gè)數(shù)A和另一個(gè)數(shù)B進(jìn)行異或運(yùn)算會(huì)生成另一個(gè)數(shù)C,如果再將C和B進(jìn)行異或運(yùn)算則C又會(huì)還原為A。

相對(duì)于其他的簡(jiǎn)易加密算法,XOR算法的優(yōu)點(diǎn)如下。

(1)算法簡(jiǎn)單,對(duì)于高級(jí)語言很容易能實(shí)現(xiàn)。

(2)速度快,可以在任何時(shí)候、任何地方使用。

(3)對(duì)任何字符都是有效的,不像有些簡(jiǎn)易加密算法,只對(duì)西文字符有效,對(duì)中文加密后再解密無法還原為原來的字符。

XOR算法實(shí)現(xiàn)

上一部分介紹了如何使用XOR運(yùn)算進(jìn)行加密/解密的原理,本節(jié)將使用其加密用戶的登錄信息。根據(jù)上一小節(jié)介紹的XOR加密算法的原理,不難寫出以下的加密解密函數(shù)。首先列出加密算法。

1 <!--encrypy_xor:簡(jiǎn)單使用XOR運(yùn)算的加密函數(shù)----------------------->2 <?php3 //加密函數(shù)4 function myEncrypt($string, $key)5 {6 for($i=0; $i<STRLEN($STRING); p $i++)<> 7 {8 for($j=0; $j<STRLEN($KEY); p $j++)<> 9 {10 $string[$i] = $string[$i]^$key[$j];11 }12 }13 return $string;14 }

第4行定義了加密函數(shù)myEncrypt(),輸入?yún)?shù)$string為明文,而$key為密鑰;輸出為使用$key作為密鑰并使用XOR加密算法產(chǎn)生的密文。

第6~12行的外層for循環(huán)對(duì)明文字符串的每一個(gè)字符進(jìn)行循環(huán),而內(nèi)層的for循環(huán)(第8~11行)對(duì)明文的每一字符循環(huán)與密鑰的每一位做異或運(yùn)算。其原理已經(jīng)在上一小節(jié)中介紹,不再重述。

同樣,與加密函數(shù)類似,可以寫出下面的解密函數(shù)。

1 //解密函數(shù)2 function myDecrypt($string, $key)3 {4 for($i=0; $i<STRLEN($STRING); p $i++)<> 5 {6 for($j=0; $j<STRLEN($KEY); p $j++)<> 7 {8 $string[$i] = $key[$j]^$string[$i];9 }10 }11 return $string;12 }13 ?>

第4行定義了解密函數(shù)myDecrypt (),輸入?yún)?shù)$string為密文,而$key為密鑰;輸出為使用$key作為密鑰并使用XOR解密算法產(chǎn)生的明文。

下面,通過一個(gè)應(yīng)用示例來進(jìn)一步說明加密函數(shù)的功能。

1 //示例2 $my_password='chair';3 echo 'my_password = $my_password';4 $my_key='1234567890';5 $my_password_en=myEncrypt($my_password,$my_key);6 echo 'my_password_en = $my_password_en';7 $my_password_de=myDecrypt($my_password_en,$my_key);8 echo 'my_password_de = $my_password_de';

第3行首先定義了一個(gè)明文$my_password,然后在第4行定義密鑰$my_key。

第5、6行分別調(diào)用加密函數(shù)生成密文并輸出;反過來,又在第7、8行將密文解密。

上面示例的運(yùn)行結(jié)果如下。

my_password = chair

my_password_en = RYPXC

my_password_de = chair

用XOR算法實(shí)現(xiàn)身份驗(yàn)證

上兩部分分別介紹了使用XOR運(yùn)算進(jìn)行信息加密/解密的原理和實(shí)現(xiàn),下面,將使用這一方法來對(duì)用戶的登錄密碼進(jìn)行加密。本例中,為了保護(hù)用戶的密碼,系統(tǒng)想要達(dá)到的目的如下。

·在用戶注冊(cè)時(shí),用戶需要添寫用戶密碼表單。

·除用戶本人之外,其他任何人都無法獲取其密碼信息,包括系統(tǒng)設(shè)計(jì)者和數(shù)據(jù)庫管理員。

·系統(tǒng)能根據(jù)用戶輸入的密碼驗(yàn)證用戶的合法性。

為了達(dá)到以上目的,使用XOR算法時(shí)可以選擇用戶名作為明文,而密鑰是用戶自定義的密碼,然后將加密后的用戶名存儲(chǔ)在數(shù)據(jù)庫中。

另外,在用戶登錄的時(shí)候,有以下兩種方式來驗(yàn)證合法用戶。

(1)根據(jù)其提交的用戶名(明文)和密碼(密鑰)信息重新加密,并使用加密后的信息與數(shù)據(jù)庫中存儲(chǔ)的密碼信息進(jìn)行比較,如果相等,則用戶合法,否則,為非法用戶。

(2)根據(jù)數(shù)據(jù)庫中存儲(chǔ)的密碼信息(明文)和用戶輸入的密碼(密鑰)信息進(jìn)行解密,并把加密后的信息與用戶提交的用戶名進(jìn)行比較,如果相等,則用戶合法,否則,為非法用戶。

兩種方式都可以實(shí)現(xiàn)第3個(gè)目的,本例,將采用第2種方式。本例的實(shí)現(xiàn)代碼可在18.4.1節(jié)“用戶登錄”和18.4.2節(jié)“檢查用戶”的實(shí)現(xiàn)基礎(chǔ)之上實(shí)現(xiàn),其中“用戶登錄”頁面無需變化,“檢查用戶”的實(shí)現(xiàn)參考如下。

1 <?php2 session_start(); //裝載Session庫,一定要放在首行3 $user_name=$_POST['user_name'];4 session_register('user_name'); //注冊(cè)$user_name變量,注意沒有$符號(hào)56 require_once('sys_conf.inc'); //系統(tǒng)配置文件,包含數(shù)據(jù)庫配置信息7 require_once('encrypy_xor.php'); //包含xor加密函數(shù)文件89 //連接數(shù)據(jù)庫10 $link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD);11 mysql_select_db($DBNAME); //選擇數(shù)據(jù)庫my_chat1213 //查詢是否存在登錄用戶信息14 $str='select name,password from user where name ='$user_name'';15 $result=mysql_query($str,$link_id); //執(zhí)行查詢16 @$rows=mysql_num_rows($result); //取得查詢結(jié)果的記錄筆數(shù)17 $user_name=$_SESSION['user_name'];18 $password=$_POST['password'];19 $password_en=myEncrypt($user_name,$password); //加密用戶信息2021 //對(duì)于老用戶22 if($rows!=0)23 {24 list($name,$pwd)=mysql_fetch_row($result);25 $password_de=myDecrypt($pwd,$password); //解密用戶信息2627 //如果密碼輸入正確28 if($user_name==$password_de)29 {30 $str='update user set is_online =1 where name ='$user_name' and password='$password_en'';31 $result=mysql_query($str, $link_id); //執(zhí)行查詢32 require('main.php'); //轉(zhuǎn)到聊天頁面33 }34 //密碼輸入錯(cuò)誤35 else36 {37 require('relogin.php');38 }39 }40 //對(duì)于新用戶,將其信息寫入數(shù)據(jù)庫41 else42 {43 $str='insert into user (name,password,is_online) values('$user_name', '$password_en',1)';44 $result=mysql_query($str, $link_id); //執(zhí)行查詢45 require('main.php'); //轉(zhuǎn)到聊天頁面46 }47 //關(guān)閉數(shù)據(jù)庫48 mysql_close($link_id);49 ?>

第7行引入了加密函數(shù)文件encrypy_xor.php,包括上一小節(jié)介紹的兩個(gè)函數(shù)。

第19行,使用用戶提交的用戶名和密碼得到加密后的密碼值,并且對(duì)于新用戶,在第44行將這個(gè)加密后的值存儲(chǔ)在數(shù)據(jù)庫中。

另外,對(duì)于老用戶,在第24獲取數(shù)據(jù)庫中用戶名和加密后的密碼信息,并在25行利用這兩個(gè)值進(jìn)行解密,然后在第28行通過比較解密后的值與用戶提交的用戶名信息來檢查用戶的合法性。

自動(dòng)生成密鑰

上一部分介紹了如何使用XOR加密算法進(jìn)行對(duì)用戶信息的加密,其中,用戶所輸入的口令信息實(shí)際上成為了加密算法中的密鑰,而用戶名作為明文使用,雖然這能很好地完成功能,但是在邏輯上,這種方法似乎有些不合理。

本文將介紹一種自動(dòng)生成密鑰的技術(shù),可以使用自動(dòng)生成的密鑰對(duì)用戶提交的密碼明文加密,使邏輯更加合理一些。

本例,假設(shè)生成的密鑰為512位。代碼如下。

1 <!--keygen.php:自動(dòng)生成密鑰------------------------------------>2 <?php34 //自動(dòng)生成長(zhǎng)度為$len的密鑰5 function generate_key($len)6 {7 $lowerbound = 35 ;8 $upperbound = 96 ;9 $strMyKey = '';1011 for($i=1;$i<=$len;$i++)12 {13 $rnd=rand(0,100); //產(chǎn)生隨機(jī)數(shù)14 $k = (($upperbound - $lowerbound) + 1) * $rnd + $lowerbound;15 $strMyKey=$strMyKey.$k;16 }17 return $strMyKey;18 }1920 //將密鑰寫入文件$file_name21 function write_key($key,$file_name)22 {23 $filename='C:key.txt';24 $key=generate_key($key,512);2526 //使用添加模式打開$filename,文件指針將會(huì)在文件的末尾27 if(!$handle=fopen($filename,'w'))28 {29 print'不能打開文件$filename';30 exit;31 }3233 //將$key寫入到我們打開的文件中。34 if(!fwrite($handle,$key))35 {36 print'不能寫入到文件$filename';37 exit;38 }39 fclose($handle);40 }4142 //讀取密鑰文件中的密鑰43 function get_key($file_name)44 {45 //打開文件46 $fp = fopen ($file_name, 'r');47 $result='';48 //逐行讀取49 while (!feof($fp))50 {51 $buffer = fgets($fp, 4096);52 $result=$result.$buffer;53 }54 return $result;55 }5657 ///*58 $KeyLocation = 'C:key.txt'; //保存密鑰的文件59 $key='123456';60 write_key($key,$KeyLocation);61 echo get_key($KeyLocation);62 //*/63 ?>

代碼包括3個(gè)函數(shù)。

·generate_key($len):自動(dòng)生成長(zhǎng)度為$len的密鑰

·write_key($key,$file_name):將密鑰寫入文件$file_name

·get_key($file_name):讀取密鑰文件$file_name中的密鑰值

在使用時(shí),當(dāng)用戶第一次登錄系統(tǒng)時(shí),自動(dòng)為其生成密鑰值,對(duì)于這個(gè)密鑰值,可以有兩種方式來處理。

(1)將其存入數(shù)據(jù)庫的某個(gè)字段中,這種方法的缺點(diǎn)是密鑰在數(shù)據(jù)庫中的安全性無法得到保證;

(2)將這個(gè)密鑰保存在用戶本地的文件中,這樣就可以避免密鑰被別人獲取,但這種方式的缺點(diǎn)是,當(dāng)用戶使用其他機(jī)器訪問系統(tǒng)時(shí),就無法登錄。

本例中,將使用第2種方式。

具體地,上面代碼第11~18行通過生成隨機(jī)數(shù)的方式來不斷生成密鑰,并通過一個(gè)計(jì)算來增強(qiáng)其復(fù)雜性。其中的lowerbound和upperbound的數(shù)值其實(shí)就是你想使用來加密的ASCII字符范圍。下面是生成的一個(gè)密鑰文件示例。

208123915925183361116049369344372701567721435181102718332639307390344373445407

524316475863232913993383189547474747394154915312639841226741894189965623523913

011164730113445201935692839710274127251577929493941487145611337531549110895367

593586318332391170941272701152344371709270125776235313540032267139933835677407

617384135696111239130732949469623520815987524358635491542913374933524334454251

400327015367133759324537171709152357391089524342514685239122673135531363151191

833412771743139654…

最后,需要把密鑰保存在服務(wù)器上一個(gè)安全的地方,然后就可以利用其和諸如XOR這樣的加密算法來對(duì)用戶信息進(jìn)行加密/解密了。如何在上一部分介紹的XOR中使用這個(gè)密鑰非常簡(jiǎn)單,不再詳述。共2頁。 9 7 1 2

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久婷婷激情| sm久久捆绑调教精品一区| 欧美三级网址| 久久女人天堂| 国产精品日本一区二区三区在线| 久久狠狠久久| 国产丝袜一区| 奇米777国产一区国产二区| 欧美天堂一区| 国产suv精品一区| 一区免费视频| 日韩av在线播放中文字幕| 精品精品99| 蜜桃tv一区二区三区| 亚洲免费毛片| 国产成人免费| 黄色精品网站| 国产精品午夜一区二区三区| 在线天堂资源www在线污| 亚洲欧美激情诱惑| 你懂的网址国产 欧美| 亚洲一级高清| 欧美天堂一区二区| 99久久亚洲精品蜜臀| 91成人精品在线| 久久久国产精品一区二区中文| 无码日韩精品一区二区免费| 精品三级在线观看视频| 天堂av在线一区| 久久香蕉精品香蕉| 先锋亚洲精品| 中文字幕高清在线播放| 日韩毛片网站| 亚洲成人一区在线观看| 日韩一区二区三区在线看| 女生影院久久| 日本成人在线网站| 久久精品二区三区| 国产精品天堂蜜av在线播放| 日韩午夜精品| 日韩福利一区| 国产欧美三级| 国产亚洲在线观看| 高清久久一区| 欧美一区久久| 99国产精品| 综合日韩av| 国产日韩免费| 亚洲欧美日韩国产一区| 青青青免费在线视频| 欧美日韩精品一区二区三区视频 | 麻豆成人在线| 国产日韩电影| 国产精品a级| 综合在线一区| 免费av一区| 国内精品麻豆美女在线播放视频| 亚洲狼人精品一区二区三区| 国产91一区| 美女国产一区二区三区| 日韩精品久久理论片| 野花国产精品入口| 成人精品中文字幕| 久久爱www成人| 亚欧成人精品| 美女久久网站| 1024精品久久久久久久久| 亚洲女同av| 免费一级欧美在线观看视频| 日韩精品a在线观看91| 欧美专区一区二区三区| 米奇777超碰欧美日韩亚洲| 九九精品调教| bbw在线视频| 国产精品黄网站| 日韩一区二区三免费高清在线观看 | 欧美成人基地 | 国产精品一线天粉嫩av| 蜜臀久久99精品久久久画质超高清 | 日本va欧美va欧美va精品| 免费看黄色91| 免费久久精品视频| 日韩影院免费视频| 夜夜精品视频| 欧美日韩精品免费观看视频完整| 亚洲精品.com| 亚洲国产影院| 久久激情网站| 亚洲先锋成人| 自由日本语亚洲人高潮| 丝袜美腿诱惑一区二区三区| 91嫩草亚洲精品| 国产盗摄——sm在线视频| 黄毛片在线观看| 人在线成免费视频| 久久青草久久| 婷婷综合五月| 美女日韩在线中文字幕| 亚洲小说春色综合另类电影| 亚洲精品九九| 欧美一级二区| 国产精品啊v在线| 国内一区二区三区| 福利欧美精品在线| 欧洲精品一区二区三区| 日韩国产在线| 九九综合在线| 视频一区欧美日韩| 亚洲1区在线| 国产精品久久久久久久免费软件| 国产精品久久乐| 国产精品久久久久蜜臀| 成人午夜国产| 国产一级久久| 日本视频一区二区| 老司机免费视频一区二区三区| 国产aⅴ精品一区二区四区| 亚洲日本网址| 欧美专区18| 久久国产免费看| 欧美aaaaaa午夜精品| 水蜜桃精品av一区二区| 日韩精品首页| 免费精品视频| 久久国产人妖系列| 在线天堂中文资源最新版| 婷婷综合网站| 日韩成人一级| 精品视频在线一区二区在线| av高清不卡| 亚洲欧美日本视频在线观看| 日本中文字幕视频一区| 国产精品久一| 欧美日韩一二三四| 免费美女久久99| 国产精品一在线观看| 97se综合| 最新亚洲国产| 丰满少妇一区| 久久一区二区三区电影| 亚洲免费资源| 国产精品久久久久久久免费观看| 欧美午夜不卡影院在线观看完整版免费 | 伊人国产精品| 麻豆国产精品| 91久久在线| 久久99久久人婷婷精品综合| 四虎4545www国产精品| 中文字幕亚洲影视| 精品国产亚洲日本| 99国产成+人+综合+亚洲欧美| 欧美久久精品| 久久一区二区三区喷水| 欧美日韩亚洲国产精品| 日韩精品看片| 欧美日韩亚洲一区三区| 日韩在线短视频| 日韩免费精品| 99久久久久| 国产亚洲观看| 精品欧美激情在线观看| 国产香蕉精品| 婷婷亚洲五月色综合| 国产欧美高清视频在线| 激情欧美一区二区三区| 国产精品一区二区精品| 亚洲黄页一区| 精品久久福利| 亚洲免费观看高清完整版在线观| 国产h片在线观看| 日韩一区二区三区高清在线观看| 青青久久av| 欧美国产中文高清| 蜜桃久久av一区| 蜜桃精品在线| 久久国产人妖系列| 亚洲综合日本| 久久久久国产精品一区二区| 欧美在线日韩| 免费日韩av| 99久久九九| 高清不卡一区| 国产精品嫩草影院在线看| 免费看欧美美女黄的网站| 日韩一区二区三区免费| 国产伦理久久久久久妇女| 亚洲专区在线| 美女av在线免费看| 国产精品久久免费视频| 亚洲天堂免费| 欧美91精品| a国产在线视频| 美女精品久久| 日韩一二三区在线观看| 日韩一级网站| 久久婷婷激情| 首页国产精品| 久久99久久久精品欧美| 日韩国产精品久久久| 麻豆精品网站|