PHPにおけるXOR演算を利用した暗号化アルゴリズムの共有 MySQL application_PHPチュートリアル
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 行目) は平文の各文字とキーの各ビットをループします。原則は前のセクションで紹介したので繰り返しません。
コードをコピーします
for($i=0;$i
{
for($j=0;$j
$string[$i]=$key[$j] ]^$string [$i];
}
}
return$string;
}
?>
4 行目は復号化関数 myDecrypt() を定義し、入力パラメータ $string は暗号文です。キー; 出力 $key をキーとして使用し、XOR 復号化アルゴリズムを使用して生成された平文。
以下では、アプリケーション例を使用して、暗号化機能の機能をさらに説明します。
コードをコピーします
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);
?>
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
617384135696111239130732949469623 520815987524358635491542913374933524334454251
400327015367133759324537171709 15235739108952434251468523912267313553136315 1191
833412771743139654…
最後に、キーをサーバー上の安全な場所に保存する必要があります。その後、それと XOR などの暗号化アルゴリズムを使用してユーザーを暗号化できます。情報/復号化されました。前のセクションで紹介した XOR でこのキーを使用する方法は非常に簡単なので、詳細は説明しません。
http://www.bkjia.com/PHPjc/324110.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/324110.html
技術記事 XOR アルゴリズムの原理 主な暗号化方式から、転置方式は単純すぎる、特にデータ量が少ない場合、暗号文から平文を推測するのが容易で、置換方式は効果的でシンプルです...

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











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

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

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

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

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

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

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

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