国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - PHP MySQL應用中使用XOR運算加密算法分享

PHP MySQL應用中使用XOR運算加密算法分享

2019-12-11 13:24PHP教程網 PHP教程

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

XOR算法原理

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

從各種替換法運算的特點看,異或運算最適合用于簡易加解密運算,這種方法的原理是:當一個數A和另一個數B進行異或運算會生成另一個數C,如果再將C和B進行異或運算則C又會還原為A。

相對于其他的簡易加密算法,XOR算法的優點如下。

(1)算法簡單,對于高級語言很容易能實現。

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

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

XOR算法實現

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

復制代碼代碼如下:

<!–encrypy_xor:簡單使用XOR運算的加密函數———————–> 
<?php 
//加密函數 
functionmyEncrypt($string,$key) 

for($i=0;$i<STRLEN($STRING);p$i++)<> 

for($j=0;$j<STRLEN($KEY);p$j++)<> 

$string[$i]=$string[$i]^$key[$j]; 


return$string; 


第4行定義了加密函數myEncrypt(),輸入參數$string為明文,而$key為密鑰;輸出為使用$key作為密鑰并使用XOR加密算法產生的密文。 
第6~12行的外層for循環對明文字符串的每一個字符進行循環,而內層的for循環(第8~11行)對明文的每一字符循環與密鑰的每一位做異或運算。其原理已經在上一小節中介紹,不再重述。 
同樣,與加密函數類似,可以寫出下面的解密函數。 

復制代碼代碼如下:

//解密函數 
functionmyDecrypt($string,$key) 

for($i=0;$i<STRLEN($STRING);p$i++)<> 

for($j=0;$j<STRLEN($KEY);p$j++)<> 

$string[$i]=$key[$j]^$string[$i]; 


return$string; 

?> 


第4行定義了解密函數myDecrypt(),輸入參數$string為密文,而$key為密鑰;輸出為使用$key作為密鑰并使用XOR解密算法產生的明文。 
下面,通過一個應用示例來進一步說明加密函數的功能。 

復制代碼代碼如下:

//示例 
$my_password="chair"; 
echo"my_password=$my_password"; 
$my_key="1234567890″; 
$my_password_en=myEncrypt($my_password,$my_key); 
echo"my_password_en=$my_password_en"; 
$my_password_de=myDecrypt($my_password_en,$my_key); 
echo"my_password_de=$my_password_de"; 


第3行首先定義了一個明文$my_password,然后在第4行定義密鑰$my_key。 
第5、6行分別調用加密函數生成密文并輸出;反過來,又在第7、8行將密文解密。 
上面示例的運行結果如下。 
my_password=chair 
my_password_en=RYPXC 
my_password_de=chair 
用XOR算法實現身份驗證 
上兩部分分別介紹了使用XOR運算進行信息加密/解密的原理和實現,下面,將使用這一方法來對用戶的登錄密碼進行加密。本例中,為了保護用戶的密碼,系統想要達到的目的如下。 
·在用戶注冊時,用戶需要添寫用戶密碼表單。 
·除用戶本人之外,其他任何人都無法獲取其密碼信息,包括系統設計者和數據庫管理員。 
·系統能根據用戶輸入的密碼驗證用戶的合法性。 
為了達到以上目的,使用XOR算法時可以選擇用戶名作為明文,而密鑰是用戶自定義的密碼,然后將加密后的用戶名存儲在數據庫中。 
另外,在用戶登錄的時候,有以下兩種方式來驗證合法用戶。 
(1)根據其提交的用戶名(明文)和密碼(密鑰)信息重新加密,并使用加密后的信息與數據庫中存儲的密碼信息進行比較,如果相等,則用戶合法,否則,為非法用戶。 
(2)根據數據庫中存儲的密碼信息(明文)和用戶輸入的密碼(密鑰)信息進行解密,并把加密后的信息與用戶提交的用戶名進行比較,如果相等,則用戶合法,否則,為非法用戶。 
兩種方式都可以實現第3個目的,本例,將采用第2種方式。本例的實現代碼可在18.4.1節“用戶登錄"和18.4.2節“檢查用戶"的實現基礎之上實現,其中“用戶登錄"頁面無需變化,“檢查用戶"的實現參考如下。 

復制代碼代碼如下:

<?php 
session_start();//裝載Session庫,一定要放在首行 
$user_name=$_POST["user_name"]; 
session_register(“user_name");//注冊$user_name變量,注意沒有$符號 
require_once(“sys_conf.inc");//系統配置文件,包含數據庫配置信息 
require_once(“encrypy_xor.php");//包含xor加密函數文件 
//連接數據庫 
$link_id=mysql_connect($DBHOST,$DBUSER,$DBPWD); 
mysql_select_db($DBNAME);//選擇數據庫my_chat 
//查詢是否存在登錄用戶信息 
$str="selectname,passwordfromuserwherename='$user_name'"; 
$result=mysql_query($str,$link_id);//執行查詢 
@$rows=mysql_num_rows($result);//取得查詢結果的記錄筆數 
$user_name=$_SESSION["user_name"]; 
$password=$_POST["password"]; 
$password_en=myEncrypt($user_name,$password);//加密用戶信息 
//對于老用戶 
if($rows!=0) 

list($name,$pwd)=mysql_fetch_row($result); 
$password_de=myDecrypt($pwd,$password);//解密用戶信息 
//如果密碼輸入正確 
if($user_name==$password_de) 

$str="updateusersetis_online=1wherename='$user_name'andpassword='$password_en'"; 
$result=mysql_query($str,$link_id);//執行查詢 
require(“main.php");//轉到聊天頁面 

//密碼輸入錯誤 
else 

require(“relogin.php"); 


//對于新用戶,將其信息寫入數據庫 
else 

$str="insertintouser(name,password,is_online)values(‘$user_name','$password_en',1)"; 
$result=mysql_query($str,$link_id);//執行查詢 
require(“main.php");//轉到聊天頁面 

//關閉數據庫 
mysql_close($link_id); 
?> 


第7行引入了加密函數文件encrypy_xor.php,包括上一小節介紹的兩個函數。 
第19行,使用用戶提交的用戶名和密碼得到加密后的密碼值,并且對于新用戶,在第44行將這個加密后的值存儲在數據庫中。 
另外,對于老用戶,在第24獲取數據庫中用戶名和加密后的密碼信息,并在25行利用這兩個值進行解密,然后在第28行通過比較解密后的值與用戶提交的用戶名信息來檢查用戶的合法性。 
自動生成密鑰 
上一部分介紹了如何使用XOR加密算法進行對用戶信息的加密,其中,用戶所輸入的口令信息實際上成為了加密算法中的密鑰,而用戶名作為明文使用,雖然這能很好地完成功能,但是在邏輯上,這種方法似乎有些不合理。 
本文將介紹一種自動生成密鑰的技術,可以使用自動生成的密鑰對用戶提交的密碼明文加密,使邏輯更加合理一些。 
本例,假設生成的密鑰為512位。代碼如下。 

復制代碼代碼如下:

<!–keygen.php:自動生成密鑰————————————> 
<?php 
//自動生成長度為$len的密鑰 
functiongenerate_key($len) 

$lowerbound=35; 
$upperbound=96; 
$strMyKey=""; 
for($i=1;$i<=$len;$i++) 

$rnd=rand(0,100);//產生隨機數 
$k=(($upperbound-$lowerbound)+1)*$rnd+$lowerbound; 
$strMyKey=$strMyKey.$k; 

return$strMyKey; 

//將密鑰寫入文件$file_name 
functionwrite_key($key,$file_name) 

$filename="C:\key.txt"; 
$key=generate_key($key,512); 
//使用添加模式打開$filename,文件指針將會在文件的末尾 
if(!$handle=fopen($filename,'w')) 

print"不能打開文件$filename"; 
exit; 

//將$key寫入到我們打開的文件中。 
if(!fwrite($handle,$key)) 

print"不能寫入到文件$filename"; 
exit; 

fclose($handle); 

//讀取密鑰文件中的密鑰 
functionget_key($file_name) 

//打開文件 
$fp=fopen($file_name,"r"); 
$result=""; 
//逐行讀取 
while(!feof($fp)) 

$buffer=fgets($fp,4096); 
$result=$result.$buffer; 

return$result; 

///* 
$KeyLocation="C:\key.txt";//保存密鑰的文件 
$key="123456″; 
write_key($key,$KeyLocation); 
echoget_key($KeyLocation); 
//*/ 
?> 


代碼包括3個函數。 
◆ generate_key($len):自動生成長度為$len的密鑰 
◆ write_key($key,$file_name):將密鑰寫入文件$file_name 
◆ get_key($file_name):讀取密鑰文件$file_name中的密鑰值 
在使用時,當用戶第一次登錄系統時,自動為其生成密鑰值,對于這個密鑰值,可以有兩種方式來處理。 
(1)將其存入數據庫的某個字段中,這種方法的缺點是密鑰在數據庫中的安全性無法得到保證; 
(2)將這個密鑰保存在用戶本地的文件中,這樣就可以避免密鑰被別人獲取,但這種方式的缺點是,當用戶使用其他機器訪問系統時,就無法登錄。 
本例中,將使用第2種方式。 
具體地,上面代碼第11~18行通過生成隨機數的方式來不斷生成密鑰,并通過一個計算來增強其復雜性。其中的lowerbound和upperbound的數值其實就是你想使用來加密的ASCII字符范圍。下面是生成的一個密鑰文件示例。 
208123915925183361116049369344372701567721435181102718332639307390344373445407 
524316475863232913993383189547474747394154915312639841226741894189965623523913 
011164730113445201935692839710274127251577929493941487145611337531549110895367 
593586318332391170941272701152344371709270125776235313540032267139933835677407 
617384135696111239130732949469623520815987524358635491542913374933524334454251 
400327015367133759324537171709152357391089524342514685239122673135531363151191 
833412771743139654… 
最后,需要把密鑰保存在服務器上一個安全的地方,然后就可以利用其和諸如XOR這樣的加密算法來對用戶信息進行加密/解密了。如何在上一部分介紹的XOR中使用這個密鑰非常簡單,不再詳述。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色吧一区 | 日韩成人在线影院 | 久久xx | 久久亚洲精品视频 | 久久精品欧美 | 亚洲国内精品 | 九色影院 | 亚洲乱码国产乱码精品精的特点 | 激情综合在线观看 | 国产综合久久久 | 亚洲国产精品99久久久久久久久 | 亚洲久久一区二区 | 波多野结衣一区二区三区中文字幕 | 欧美福利电影在线观看 | 国产精品久久久久久久 | 天天拍天天干天天操 | 免费一区二区 | 精品亚洲第一 | 中文字幕精品视频 | 香蕉成人 | 日韩国产欧美精品 | 精品福利片 | 国产精品综合 | 中文字幕第5页 | av成人毛片 | 国产精品久久久久久久久久久新郎 | 91成人黄色 | 一级毛片儿 | 精品国产乱码久久久久久牛牛 | 狠狠干av | 日日久 | 国产高清在线精品 | 欧美精品一区二区蜜臀亚洲 | 午夜大片男女免费观看爽爽爽尤物 | 亚洲精品一区二区 | 欧美精品黄色 | 亚洲 欧美 日韩在线 | 欧美福利在线观看 | 中文字幕在线观看av | 国产精品久久99 | 国产一区二区资源 |