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

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

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

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

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

XOR算法原理

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

從各種替換法運(yùn)算的特點(diǎn)看,異或運(yù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。

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

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

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

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

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

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

1 <!--encrypy_xor:簡單使用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)對明文字符串的每一個(gè)字符進(jìn)行循環(huán),而內(nèi)層的for循環(huán)(第8~11行)對明文的每一字符循環(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),下面,將使用這一方法來對用戶的登錄密碼進(jìn)行加密。本例中,為了保護(hù)用戶的密碼,系統(tǒng)想要達(dá)到的目的如下。

·在用戶注冊時(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'); //注冊$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 //對于老用戶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 //對于新用戶,將其信息寫入數(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行,使用用戶提交的用戶名和密碼得到加密后的密碼值,并且對于新用戶,在第44行將這個(gè)加密后的值存儲(chǔ)在數(shù)據(jù)庫中。

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

自動(dòng)生成密鑰

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

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

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

1 <!--keygen.php:自動(dòng)生成密鑰------------------------------------>2 <?php34 //自動(dò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)生成長度為$len的密鑰

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

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

在使用時(shí),當(dāng)用戶第一次登錄系統(tǒng)時(shí),自動(dòng)為其生成密鑰值,對于這個(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這樣的加密算法來對用戶信息進(jìn)行加密/解密了。如何在上一部分介紹的XOR中使用這個(gè)密鑰非常簡單,不再詳述。共2頁。 9 7 1 2

標(biāo)簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲久久视频| 人人草在线视频| 欧美不卡高清| 久久国产电影| 特黄毛片在线观看| 日韩欧美三级| 欧美日韩国产高清| 亚洲一区成人| 日韩精品久久久久久| 国产亚洲一卡2卡3卡4卡新区| 日本不卡在线视频| 久久国产生活片100| 麻豆91在线播放| 精品不卡一区| 久久亚洲成人| 蜜臀av国产精品久久久久| 四虎精品一区二区免费| 97久久中文字幕| 久久av偷拍| 国产精品国产一区| 亚洲啊v在线| 国产午夜精品一区二区三区欧美| 国产视频一区在线观看一区免费| 日韩三级精品| 精品深夜福利视频| 久久中文视频| 欧美成人国产| 亚洲精品影视| 久久久精品区| 秋霞影视一区二区三区| 久久亚洲欧洲| 欧美日韩一视频区二区| 国产suv精品一区二区四区视频 | 99久久夜色精品国产亚洲狼| 亚洲bt欧美bt精品777| 日本蜜桃在线观看视频| 婷婷亚洲精品| 欧美jjzz| 国产精品久久久久久久免费观看| 蜜桃视频一区二区| www.com.cn成人| 欧美日韩黄网站| 欧美日韩国产免费观看视频| 国产免费久久| 首页亚洲欧美制服丝腿| 国产福利亚洲| 亚洲专区欧美专区| 日本在线精品| 老司机免费视频一区二区三区| 99视频精品| 麻豆理论在线观看| 国产精区一区二区| 亚洲一二三区视频| 精品成人18| 日韩av一二三| 石原莉奈在线亚洲三区| 99久久夜色精品国产亚洲狼 | 亚洲成人不卡| 欧美a一区二区| 青青国产精品| 丝袜亚洲另类欧美| 99久久久久久中文字幕一区| 国产精品99在线观看| 国产亚洲欧美日韩精品一区二区三区 | 91一区二区三区四区| 91午夜精品| 日本在线视频一区二区| 国产精品视区| 亚洲二区精品| 色婷婷成人网| 欧美日韩黑人| 国产一区二区视频在线看| 在线免费观看亚洲| 久久91导航| 久久福利在线| 日韩中文字幕| 精品在线播放| 欧美黄页在线免费观看| 中文一区在线| 国产精品字幕| 成人台湾亚洲精品一区二区 | 日本精品一区二区三区在线观看视频| 中文精品视频| 亚洲深夜福利| 午夜一级在线看亚洲| 国产亚洲精品久久久久婷婷瑜伽| 欧美福利专区| 91久久在线| 美女久久一区| 蜜臀av亚洲一区中文字幕| 日韩精品一级二级| 免费精品视频| 亚洲视频国产| 亚洲精品动态| 91精品国产自产在线丝袜啪| 国产日韩在线观看视频| 久久国内精品| 国产精品hd| 麻豆精品视频在线观看视频| 国产精品v亚洲精品v日韩精品| 国产精品免费99久久久| 精品一区二区三区免费看 | 久色成人在线| 亚洲不卡视频| 91欧美精品| 国产激情久久| 综合日韩av| 久久国产精品成人免费观看的软件| 在线视频观看日韩| 亚洲欧美日本视频在线观看| 亚洲一区国产一区| 视频福利一区| 中文字幕在线看片| 国产一区二区三区日韩精品| 麻豆一区二区在线| 国产经典一区| 精品欧美日韩精品| 视频在线不卡免费观看| 欧美激情另类| 粉嫩av一区二区三区四区五区 | 日韩欧美一区二区三区在线观看| 亚洲二区免费| 亚洲欧美在线综合| 国产欧美自拍一区| 国产成人久久精品麻豆二区| 秋霞影视一区二区三区| 亚洲黄色在线| 日本不卡视频在线观看| 免费在线观看一区| 国产精品蜜芽在线观看| 欧美 日韩 国产精品免费观看| 中文日韩欧美| 国产亚洲精品美女久久| 欧美成人a交片免费看| 午夜在线精品偷拍| 国产欧美日韩影院| 91精品国产调教在线观看| 亚洲专区一区| 国产精品大片| 亚洲手机视频| 青草av.久久免费一区| 欧美freesex黑人又粗又大| 亚洲色图国产| 国产va在线视频| 婷婷六月综合| 欧美午夜三级| 国产99久久| 日韩欧美久久| 天堂av在线| 日本一区二区中文字幕| 91偷拍一区二区三区精品| 日韩在线播放一区二区| 国产精选一区| 红桃视频亚洲| 老牛国内精品亚洲成av人片| 一区二区自拍| 久久影视三级福利片| 欧美日韩国产亚洲一区| 国产日产高清欧美一区二区三区| 中文字幕在线看片| 日韩毛片一区| 欧美色图国产精品| 国产麻豆一区二区三区| 亚洲午夜在线| 激情欧美一区二区三区| 91精品国产乱码久久久久久久| 免费日韩av片| 美女国产一区二区三区| 亚洲天堂黄色| 日韩欧美中文字幕电影 | 激情婷婷亚洲| 日本一区中文字幕| 成人福利av| 日韩中文字幕无砖| 麻豆视频在线观看免费网站黄| 99香蕉国产精品偷在线观看| 国产欧美精品| 欧美va亚洲va日韩∨a综合色| 日韩精选在线| av亚洲一区二区三区| 亚洲精品乱码| 日韩一区二区三区免费播放| 无码日韩精品一区二区免费| 日韩一区三区| 日韩激情网站| 自由日本语亚洲人高潮| 国产亚洲精品精品国产亚洲综合| 欧美在线亚洲| 韩国久久久久久| 国产精品国码视频| 日韩精品一页| 免费视频最近日韩| 九一成人免费视频| 四季av一区二区凹凸精品| 国产精品一区高清| 一区二区国产在线| 欧美午夜不卡| 久久一区二区三区喷水| 韩国久久久久久| 精品一区二区三区中文字幕|