ホームページ バックエンド開発 PHPチュートリアル PHP MySQL应用中使用XOR运算加密算法分享_PHP

PHP MySQL应用中使用XOR运算加密算法分享_PHP

Jun 01, 2016 pm 12:14 PM
xor 暗号化アルゴリズム 手術

XOR算法原理

从加密的主要方法看,换位法过于简单,特别是对于数据量少的情况很容易由密文猜出明文,而替换法不失为一种行之有效的简易算法。

从各种替换法运算的特点看,异或运算最适合用于简易加解密运算,这种方法的原理是:当一个数A和另一个数B进行异或运算会生成另一个数C,如果再将C和B进行异或运算则C又会还原为A。

相对于其他的简易加密算法,XOR算法的优点如下。

(1)算法简单,对于高级语言很容易能实现。

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

(3)对任何字符都是有效的,不像有些简易加密算法,只对西文字符有效,对中文加密后再解密无法还原为原来的字符。

XOR算法实现

上一部分介绍了如何使用XOR运算进行加密/解密的原理,本节将使用其加密用户的登录信息。根据上一小节介绍的XOR加密算法的原理,不难写出以下的加密解密函数。首先列出加密算法。
复制代码 代码如下:

//加密函数
functionmyEncrypt($string,$key)
{
for($i=0;$i
{
for($j=0;$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
{
for($j=0;$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节“检查用户"的实现基础之上实现,其中“用户登录"页面无需变化,“检查用户"的实现参考如下。
复制代码 代码如下:
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位。代码如下。
复制代码 代码如下:

//自动生成长度为$len的密钥
functiongenerate_key($len)
{
$lowerbound=35;
$upperbound=96;
$strMyKey="";
for($i=1;$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中使用这个密钥非常简单,不再详述。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

高速暗号化アルゴリズムとそのPHPへの応用 高速暗号化アルゴリズムとそのPHPへの応用 Jun 23, 2023 am 10:42 AM

ネットワーク技術の継続的な発展に伴い、Web アプリケーションの普及が進んでおり、Web アプリケーションにおける情報セキュリティの重要性が増しています。 Web アプリケーションにおける情報セキュリティの問題を解決するために、人々は多くの暗号化アルゴリズムを開発してきました。その中で最も有名なものは、RSA、DES およびその他のアルゴリズムです。しかし、暗号アルゴリズムの復号には多くの計算量と時間を要し、システムへの負担が大きいため、短時間で高速に暗号化と復号を行うことができる高速暗号アルゴリズムが登場しました。この記事では、PHP の高レベル関数を紹介します。

Oracleデータベース操作スキル:減算演算を詳しく解説 Oracleデータベース操作スキル:減算演算を詳しく解説 Mar 02, 2024 pm 06:15 PM

Oracle データベースは、強力なリレーショナル データベース管理システムとして、ユーザーのニーズを満たす豊富なコンピューティング操作を提供します。日々のデータベース操作において、減算演算は一般的かつ重要な演算であり、必要な結果を得るためにデータの減算演算を実現するのに役立ちます。この記事では、Oracle データベースでの減算演算に関連する手法について詳しく説明し、読者がこの関数をよりよく理解して使用できるように、具体的なコード例を示します。 1. Oracle データにおける減算演算の基本概念

PHP で対称暗号化と非対称暗号化を行うにはどうすればよいですか? PHP で対称暗号化と非対称暗号化を行うにはどうすればよいですか? May 21, 2023 pm 03:10 PM

ネットワークセキュリティの分野において、暗号化技術はデータを暗号化および復号化してデータのセキュリティを確保する非常に重要な技術手段です。人気のあるサーバー側プログラミング言語として、PHP は、さまざまなアプリケーション シナリオのニーズを満たす対称暗号化および非対称暗号化のサポートも提供します。対称暗号化 対称暗号化とは、暗号化と復号化に同じキーを使用する暗号化方式を指します。 DES、3DES、AES など、多くの対称暗号化アルゴリズムがあります。 PHP では、これは mcrypt 拡張ライブラリによって提供される関数を使用して実現できます。

Python を使用して RSA 暗号化アルゴリズムを作成するにはどうすればよいですか? Python を使用して RSA 暗号化アルゴリズムを作成するにはどうすればよいですか? Sep 20, 2023 pm 01:21 PM

Python を使用して RSA 暗号化アルゴリズムを作成するにはどうすればよいですか?はじめに: RSA は、情報セキュリティの分野で広く使用されている非対称暗号化アルゴリズムです。最新の通信では、機密データの暗号化と復号化に RSA 暗号化アルゴリズムが一般的に使用されています。この記事では、Python を使用して RSA 暗号化アルゴリズムを作成する方法を紹介し、具体的なコード例を示します。 Python ライブラリのインストール RSA 暗号化アルゴリズムの作成を開始する前に、Python 暗号化ライブラリをインストールする必要があります。次のコマンドを使用してインストールできます: pipinstallrsa generated

PHP 浮動小数点演算の問題の分析と解決策 PHP 浮動小数点演算の問題の分析と解決策 Feb 27, 2024 am 11:03 AM

PHP は Web サイト開発で広く使用されているスクリプト言語であり、その強力な機能と柔軟性により、多くの開発者に選ばれるツールとなっています。ただし、PHP では、浮動小数点演算を処理する場合、特に精度と精度に関していくつかの問題もあります。この記事では、PHP の浮動小数点演算の問題を分析し、いくつかの解決策を提案し、読者がこれらの問題をよりよく理解して解決できるように、具体的なコード例も示します。問題分析 PHP では、浮動小数点数は小数を表すために使用されるデータ型です。

PHPの暗号化アルゴリズムとは何ですか? PHPの暗号化アルゴリズムとは何ですか? Aug 31, 2023 pm 05:24 PM

PHP 暗号化アルゴリズムには、MD5 アルゴリズム、SHA アルゴリズム、AES アルゴリズム、RSA アルゴリズム、Base64 エンコード、DES アルゴリズム、RC4 アルゴリズム、Blowfish アルゴリズムなどが含まれます。詳細な紹介: 1. MD5 アルゴリズムは、任意の長さのデータを固定長のハッシュ値に変換するために使用されます。PHP では、md5() 関数を使用して文字列の MD5 ハッシュ値を計算できます。2. SHA アルゴリズム (以下を含む) SHA -1. SHA-256、SHA-512 など。これらのアルゴリズムには、PHP に対応する機能があります。3. AES アルゴリズムなど。

暗号化アルゴリズムを使用して PHP Web サイトのユーザーデータを保護するにはどうすればよいですか? 暗号化アルゴリズムを使用して PHP Web サイトのユーザーデータを保護するにはどうすればよいですか? Aug 19, 2023 pm 04:00 PM

暗号化アルゴリズムを使用して PHP Web サイトのユーザーデータを保護するにはどうすればよいですか?インターネットの急速な発展に伴い、Web サイトのユーザーデータ保護がますます重要になってきています。 PHP 開発では、暗号化アルゴリズムを使用してユーザー データのセキュリティを保護できます。この記事では、一般的に使用される暗号化アルゴリズムと、それらを PHP Web サイトで使用してユーザー データを暗号化する方法を紹介します。 1. 暗号化アルゴリズムの選択 PHP Web サイトの場合、ユーザー データのセキュリティを保護するために、次の一般的に使用される暗号化アルゴリズムを選択できます。 1. 対称暗号化アルゴリズム: このアルゴリズムは同じ暗号化アルゴリズムを使用します。

ネットワークセキュリティ技術の開発の歴史 ネットワークセキュリティ技術の開発の歴史 Jun 11, 2023 pm 03:41 PM

インターネット技術の活発な発展に伴い、ネットワーク セキュリティは今日の世界的な情報化の発展における重要な要素の 1 つとなっています。サイバー攻撃やサイバー犯罪が絶え間なく発生する中、ネットワークのセキュリティを保護することは私たちにとって避けられない選択となっています。この記事では、ネットワークセキュリティ技術の発展の歴史に焦点を当てます。 1. 暗号動物学の時代(1960年代~1980年代) 暗号時代のネットワークセキュリティ技術は、主に暗号の考え方に基づいて開発されました。この時代、コンピューターは単なる巨大な機械であり、インターネットの使用は現在ほど普及しておらず、限られたものでした。

See all articles