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
$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$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 アルゴリズムの原理 主な暗号化方式から、転置方式は単純すぎる、特にデータ量が少ない場合、暗号文から平文を推測するのが容易で、置換方式は効果的でシンプルです...

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

セッション関連のXSS攻撃からアプリケーションを保護するには、次の測定が必要です。1。セッションCookieを保護するためにHTTPonlyとセキュアフラグを設定します。 2。すべてのユーザー入力のエクスポートコード。 3.コンテンツセキュリティポリシー(CSP)を実装して、スクリプトソースを制限します。これらのポリシーを通じて、セッション関連のXSS攻撃を効果的に保護し、ユーザーデータを確保できます。

PHPセッションのパフォーマンスを最適化する方法は次のとおりです。1。遅延セッション開始、2。データベースを使用してセッションを保存します。これらの戦略は、高い並行性環境でのアプリケーションの効率を大幅に改善できます。

thesession.gc_maxlifettinginttinginphpdethinesthelifsessessiondata、setinseconds.1)it'sconfiguredinphp.iniorviaini_set()。 2)AbalanceSneededToAvoidPerformanceIssues andunexpectedLogouts.3)php'sgarbagecollectionisisprobabilistic、影響を受けたBygc_probabi

PHPでは、session_name()関数を使用してセッション名を構成できます。特定の手順は次のとおりです。1。session_name()関数を使用して、session_name( "my_session")などのセッション名を設定します。 2。セッション名を設定した後、session_start()を呼び出してセッションを開始します。セッション名の構成は、複数のアプリケーション間のセッションデータの競合を回避し、セキュリティを強化することができますが、セッション名の一意性、セキュリティ、長さ、設定タイミングに注意してください。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。
