ホームページ バックエンド開発 PHPチュートリアル PHPにおけるXOR演算を利用した暗号化アルゴリズムの共有 MySQL application_PHPチュートリアル

PHPにおけるXOR演算を利用した暗号化アルゴリズムの共有 MySQL application_PHPチュートリアル

Jul 21, 2016 pm 03:25 PM
mysql php xor 主要 使用 共有 暗号化 原理 応用 方法 見て アルゴリズム 手術

XORアルゴリズムの原理

主な暗号化方式の観点から見ると、転置方式は単純すぎるため、特にデータ量が少ない場合、暗号文から平文を推測するのが容易であり、置換方式は効果的でシンプルなアルゴリズムです。

さまざまな置換演算の特性から、XOR 演算は単純な暗号化および復号化演算に最適です。この方法の原理は、数値 A と別の数値 B を XOR 演算すると、C と別の数値 C が生成されます。 B は XOR 演算され、C は A に復元されます。

他の単純な暗号化アルゴリズムと比較して、XOR アルゴリズムの利点は次のとおりです。

(1) アルゴリズムがシンプルで、高級言語で簡単に実装できます。

(2) 高速で、いつでもどこでも使用できます。

(3) 一部の単純な暗号化アルゴリズムとは異なり、漢字を暗号化して復号すると、元の文字に戻すことはできません。

XORアルゴリズムの実装

前のパートでは、暗号化/復号化に XOR 演算を使用する方法の原理を紹介しました。このセクションでは、XOR 演算を使用してユーザーのログイン情報を暗号化します。前のセクションで紹介した XOR 暗号化アルゴリズムの原理に従って、次の暗号化関数と復号化関数を作成するのは難しくありません。暗号化アルゴリズムが最初にリストされます。

コードをコピーします コードは次のとおりです:


//Encryption function
functionmyEncrypt( $string,$key)
{
for($i=0;$i
{
for($j=0;$j< STRLEN($KEY );p$j++)<>
$string[$i]=$string[$i]^$key[$j];
}
}


No.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 をキーとして使用し、XOR 復号化アルゴリズムを使用して生成された平文。
以下では、アプリケーション例を使用して、暗号化機能の機能をさらに説明します。


コードをコピーします
コードは次のとおりです: //Example$my_password="chair";
echo"my_password=$my_password";
$my_password_en= myEncrypt($my_password,$my_key);
echo"my_password_en=$my_password_en"
$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 アルゴリズムを使用して ID 認証を実装する
前の 2 つのパートでは、情報の暗号化/復号化に XOR 演算を使用する原理と実装を紹介しました。以下では、このメソッドを使用してユーザーを認証します。ログインパスワードは暗号化されています。この例では、ユーザーのパスワードを保護するために、システムは次の目的を達成したいと考えています。
・登録の際、ユーザーはユーザーパスワードフォームに記入する必要があります。
· システム設計者やデータベース管理者を含む、ユーザー本人以外の誰もパスワード情報を取得できません。
・システムは、ユーザーが入力したパスワードに基づいてユーザーの正当性を検証できます。
上記の目的を達成するために、XOR アルゴリズムを使用する場合、ユーザー名をプレーン テキストとして選択し、キーがユーザー定義のパスワードとなり、暗号化されたユーザー名をデータベースに保存できます。
また、ユーザーがログインする際に、正当なユーザーであることを確認する方法は次の 2 つがあります。
(1) 送信されたユーザー名 (平文) とパスワード (鍵) 情報に基づいて再暗号化し、暗号化された情報を使用してデータベースに保存されているパスワード情報と比較します。それらが等しい場合は、ユーザーは正当です。そうでない場合は、ユーザーは正当です。 、不正なユーザーです。
(2) データベースに保存されているパスワード情報(平文)とユーザーが入力したパスワード(鍵)情報を元に復号し、暗号化された情報とユーザーが提出したユーザー名を比較し、一致する場合は、ユーザーは正当です。それ以外の場合、 は違法ユーザーです。
どちらの方法でも 3 番目の目的を達成できます。この例では 2 番目の方法が使用されます。この例の実装コードは、セクション 18.4.1「ユーザー ログイン」およびセクション 18.4.2「ユーザーの確認」の実装リファレンスを変更する必要はありません。ユーザーを確認する」は以下の通りです。
コードをコピーします コードは次のとおりです:

session_start();//セッションライブラリをロードします。最初の行に配置する必要があります
$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);//データベースを選択します 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 行目では、前のセクションで紹介した 2 つの関数を含む暗号化関数ファイル encrypy_xor.php が導入されています。
19 行目では、ユーザーが送信したユーザー名とパスワードを使用して暗号化されたパスワード値を取得し、新規ユーザーの場合は、この暗号化された値を 44 行目のデータベースに保存します。
さらに、古いユーザーの場合は、24 行目でデータベース内のユーザー名と暗号化されたパスワード情報を取得し、これら 2 つの値を使用して 25 行目で復号化し、復号化された値を、ユーザーによって送信されたユーザー名と比較します。行 28 の user 情報を使用して、ユーザーの正当性を確認します。
キーを自動的に生成する
前のパートでは、XOR 暗号化アルゴリズムを使用してユーザー情報を暗号化する方法を紹介しましたが、ユーザーが入力したパスワード情報は実際には暗号化アルゴリズムのキーとなり、ユーザー名は平文として使用されます。仕事はうまくいきますが、論理的に考えると、このアプローチは少し無理が​​あるように思えます。
この記事では、キーを自動的に生成するテクノロジーを紹介します。自動生成されたキーを使用して、ユーザーが送信したパスワードの平文を暗号化し、ロジックをより合理的にすることができます。
この例では、生成されたキーが 512 ビットであると想定されています。コードは以下のように表示されます。

コードをコピーします コードは次のとおりです:


//長さ $len
functiongenerate_key($) のキーを自動的に生成しますlen )
{
$ lowerbound=35;
$strMyKey="";
for($i=1;$i<=$len;$i++)
$rnd=rand(0,100 ) ;//乱数を生成します
$k=(($upperbound-$ lowerbound)+1)*$rnd+$ lowerbound;
}
return$strMyKey;キーをファイル $file_name に書き込みます
functionwrite_key($key,$file_name)
{
$key=generate_key($key,512);
//Open $ using add モード filename の場合、ファイル ポインタはファイルの最後にあります
if(!$handle=fopen($filename,'w'))
print "ファイル $filename を開けません"
}
; //Change $key 開いたファイルに書き込みます。
if(!fwrite($handle,$key))
{
print "ファイル $filename に書き込めません";
}
fclose($handle)
}
//キー ファイルを読み取ります
; functionget_key($file_name)
{
//ファイルを開きます
$fp=fopen($file_name,"r")
$result="";
//1 行ずつ読み取ります
while(!feof( $fp); )
{
$buffer=fgets($fp,4096);
$result=$result.$buffer;
}
///*
$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$ を読み取りますfile_name のキー値が使用される場合、ユーザーが初めてシステムにログインするときに、ユーザー用にキー値が自動的に生成されます。このキー値を処理するには 2 つの方法があります。
(1) データベースの特定のフィールドに保存します。この方法の欠点は、データベース内のキーのセキュリティが保証できないことです。
(2) キーをユーザーのローカル ファイルに保存することで、他の人がキーを取得するのを防ぎますが、この方法の欠点は、ユーザーが他のマシンを使用してシステムにアクセスすると、ログインできないことです。
この例では、2 番目の方法が使用されます。
具体的には、上記のコードの 11 行目から 18 行目は、乱数を生成することでキーを継続的に生成し、計算によってその複雑さを高めます。下限値と上限値は、実際には暗号化に使用する ASCII 文字の範囲です。以下は、生成されたキー ファイルの例です。
52431647586323291399338318954747474 7394154915312639841226741894189965623523913
0111647301134452019356928397102741 272515779294939414871456113375315491108953 67
59358631833239117094127270115234437170927012577623531354003226713993383567 7407
617384135696111239130732949469623 520815987524358635491542913374933524334454251
400327015367133759324537171709 15235739108952434251468523912267313553136315 1191
833412771743139654…
最後に、キーをサーバー上の安全な場所に保存する必要があります。その後、それと XOR などの暗号化アルゴリズムを使用してユーザーを暗号化できます。情報/復号化されました。前のセクションで紹介した XOR でこのキーを使用する方法は非常に簡単なので、詳細は説明しません。




http://www.bkjia.com/PHPjc/324110.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/324110.html

技術記事 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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQLおよびPHPMYADMIN:コア機能と関数 MySQLおよびPHPMYADMIN:コア機能と関数 Apr 22, 2025 am 12:12 AM

MySQLとPHPMyAdminは、強力なデータベース管理ツールです。 1)MySQLは、データベースとテーブルを作成し、DMLおよびSQLクエリを実行するために使用されます。 2)PHPMyAdminは、データベース管理、テーブル構造管理、データ操作、ユーザー許可管理のための直感的なインターフェイスを提供します。

IISとPHPの互換性:ディープダイビング IISとPHPの互換性:ディープダイビング Apr 22, 2025 am 12:01 AM

IISとPHPは互換性があり、FastCGIを通じて実装されています。 1..phpファイル要求を構成ファイルを介してFastCGIモジュールに転送します。 2. FASTCGIモジュールは、PHPプロセスを開始して、パフォーマンスと安定性を改善するための要求を処理します。 3。実際のアプリケーションでは、構成の詳細、エラーデバッグ、パフォーマンスの最適化に注意する必要があります。

MySQLの外国キーの目的を説明してください。 MySQLの外国キーの目的を説明してください。 Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

SQL対MySQL:2つの関係を明確にします SQL対MySQL:2つの関係を明確にします Apr 24, 2025 am 12:02 AM

SQLはリレーショナルデータベースを管理するための標準言語であり、MySQLはSQLを使用するデータベース管理システムです。 SQLは、CRUD操作を含むデータベースと対話する方法を定義しますが、MySQLはSQL標準を実装し、ストアドプロシージャやトリガーなどの追加機能を提供します。

mysqlとmariadbを比較対照します。 mysqlとmariadbを比較対照します。 Apr 26, 2025 am 12:08 AM

MySQLとMariaDBの主な違いは、パフォーマンス、機能、ライセンスです。1。MySQLはOracleによって開発され、Mariadbはフォークです。 2. Mariadbは、高負荷環境でパフォーマンスを向上させる可能性があります。 3.MariaDBは、より多くのストレージエンジンと機能を提供します。 4.MySQLは二重ライセンスを採用し、MariaDBは完全にオープンソースです。既存のインフラストラクチャ、パフォーマンス要件、機能要件、およびライセンスコストを選択する際に考慮する必要があります。

関数と正規表現を含むJavaScriptオブジェクトをデータベースに安全に保存して復元するにはどうすればよいですか? 関数と正規表現を含むJavaScriptオブジェクトをデータベースに安全に保存して復元するにはどうすればよいですか? Apr 19, 2025 pm 11:09 PM

フロントエンド開発においてJSONで機能と正規表現を安全に処理することができますが、JavaScriptが必要です...

session_start()が複数回呼び出されるとどうなりますか? session_start()が複数回呼び出されるとどうなりますか? Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

MySQLはOracleとどのように違いますか? MySQLはOracleとどのように違いますか? Apr 22, 2025 pm 05:57 PM

MySQLは、迅速な開発や中小規模のアプリケーションに適していますが、Oracleは大規模な企業や高可用性のニーズに適しています。 1)MySQLはオープンソースで使いやすく、Webアプリケーションや中小企業に適しています。 2)Oracleは強力で、大企業や政府機関に適しています。 3)MySQLはさまざまなストレージエンジンをサポートし、Oracleは豊富なエンタープライズレベルの機能を提供します。

See all articles