この記事では、排他的論理和 (XOR) 演算を使用したシンプルで使いやすい暗号化/復号化アルゴリズムを紹介します。このアルゴリズムの原理は単純であり、読者に情報の暗号化/復号化についてのより直感的な印象を与えることを目的としています。 51CTO 推奨トピック: PHP+MySQL のベスト プラクティス XORアルゴリズムの原理 主な暗号化方式の観点から見ると、転置方式は単純すぎるため、特にデータ量が少ない場合は、暗号文から平文を推測するのは簡単です。置換方式は依然として効果的で単純なアルゴリズムです。 さまざまな置換演算の特性から判断すると、XOR 演算は単純な暗号化および復号化演算に最も適しています。この方法の原理は、数値 A と別の数値 B を XOR すると、別の数値 C が生成され、C と B を再度 XOR すると、C が A に復元されるというものです。 他の単純な暗号化アルゴリズムと比較して、XOR アルゴリズムの利点は次のとおりです。 (1)アルゴリズムは単純であり、高級言語を使用して簡単に実装できる。 (2)高速なのでいつでもどこでも使えます。 (3)欧文文字にしか効かない単純な暗号化アルゴリズムとは異なり、あらゆる文字に効きます。漢字を暗号化すると、復号化しても元の文字に戻すことはできません。 XORアルゴリズムの実装 前のセクションでは、暗号化/復号化に XOR 演算を使用する方法について説明しました。このセクションでは、これを使用してユーザーのログイン情報を暗号化します。前のセクションで紹介した XOR 暗号化アルゴリズムの原理に基づいて、次の暗号化および復号化関数を記述することは難しくありません。暗号化アルゴリズムが最初にリストされます。
4 行目は暗号化関数 myEncrypt() を定義しています。入力パラメータ $string はプレーンテキスト、$key はキーです。出力は、$key をキーとして使用し、XOR 暗号化アルゴリズムを使用して生成された暗号テキストです。 6 行目から 12 行目の外側の for ループはプレーンテキスト文字列の各文字をループし、内側の for ループ (8 行目から 11 行目) はプレーンテキストの各文字をループし、キーの各ビットで XOR 演算を実行します。この原則は前のセクションで紹介されているため、ここでは繰り返しません。 暗号化関数と同様に、次の復号化関数を記述できます。
4 行目は復号化関数 myDecrypt() を定義しています。入力パラメータ $string は暗号文、$key はキーです。出力は、$key をキーとして使用し、XOR 復号化アルゴリズムを使用して生成された平文です。 以下は、暗号化機能の機能性をさらに説明するためのアプリケーション例です。
3 行目では、まずプレーンテキスト $my_password を定義し、次に 4 行目ではキー $my_key を定義します。 5 行目と 6 行目では、それぞれ暗号化関数を呼び出して暗号文を生成して出力します。逆に、7 行目と 8 行目では暗号文が復号化されます。 上記の例を実行した結果は次のようになります。 my_password=椅子 my_password_en=RYPXC my_password_de=椅子 XORアルゴリズムを使用してID認証を実装する 前回の2回では、XOR演算を使用した情報の暗号化/復号化の原理と実装について紹介しました。次回は、この方法を使用してユーザーのログインパスワードを暗号化します。この例では、ユーザーのパスワードを保護するために、システムは次の目標を達成したいと考えています。 登録時に、ユーザーはユーザーパスワードフォームに入力する必要があります。 システム設計者やデータベース管理者など、ユーザー以外の誰もパスワード情報を取得できません。 システムは、ユーザーが入力したパスワードに基づいてユーザーの正当性を検証できます。 上記の目的を達成するには、XOR アルゴリズムを使用する場合、ユーザー名をプレーンテキストとして選択し、キーをユーザー定義のパスワードにして、暗号化されたユーザー名をデータベースに保存します。 また、ユーザーがログインする際に、正当なユーザーであるかどうかを確認する方法が 2 つあります。 (1)ユーザーが送信したユーザー名(プレーンテキスト)とパスワード(キー)情報を再暗号化し、暗号化された情報をデータベースに保存されているパスワード情報と比較します。それらが等しい場合、ユーザーは合法であり、そうでない場合は、ユーザーは違法です。 (2)データベースに保存されているパスワード情報(平文)とユーザーが入力したパスワード(キー)情報を復号化し、暗号化された情報とユーザーが送信したユーザー名を比較します。一致すればユーザーは合法であり、一致しなければユーザーは違法です。 どちらの方法でも 3 番目の目的を達成できます。この例では、2 番目の方法が使用されます。この例の実装コードは、セクション 18.4.1「ユーザー ログイン」とセクション 18.4.2「ユーザー チェック」の実装に基づいて実装できます。「ユーザー ログイン」ページを変更する必要はなく、「ユーザー チェック」の実装は次のとおりです。
7 行目では、前のセクションで紹介した 2 つの関数を含む暗号化関数ファイル encrypy_xor.php が導入されています。 19 行目では、ユーザーが送信したユーザー名とパスワードを使用して暗号化されたパスワード値を取得し、新規ユーザーの場合、この暗号化された値は 44 行目のデータベースに保存されます。 また、古いユーザーについては、24行目でデータベース内のユーザー名と暗号化されたパスワード情報を取得し、この2つの値を使用して25行目で復号化します。そして、28行目で、復号化された値とユーザーが送信したユーザー名情報を比較することで、ユーザーの正当性をチェックします。 キーを自動生成 前のセクションでは、XOR 暗号化アルゴリズムを使用してユーザー情報を暗号化する方法を紹介しました。ユーザーが入力したパスワード情報は実際には暗号化アルゴリズムのキーとなり、ユーザー名はプレーンテキストとして使用されます。これで機能は十分に達成できますが、論理的には、この方法はやや不合理に思えます。 この記事では、キーを自動生成する技術を紹介します。自動生成されたキーを使用して、ユーザーが送信したプレーンテキストのパスワードを暗号化し、ロジックをより合理的にすることができます。 この例では、生成されたキーは 512 ビットであると想定しています。コードは次のとおりです。
コードには 3 つの関数が含まれています。 ◆ generate_key($len): 長さ$lenのキーを自動的に生成する ◆ write_key($key,$file_name): キーをファイル$file_nameに書き込みます ◆ get_key($file_name): キーファイル$file_nameのキー値を読み取ります 使用時には、ユーザーがシステムに初めてログインすると、キー値が自動的に生成されます。このキー値を処理する方法は 2 つあります。 (1)データベースのフィールドに保存する。この方法の欠点は、データベース内のキーのセキュリティが保証されないことである。 (2)他人にキーが取得されないように、キーをユーザーのローカルファイルに保存します。ただし、この方法の欠点は、ユーザーが他のマシンを使用してシステムにアクセスすると、ログインできなくなることです。 この例では、2 番目の方法が使用されます。 具体的には、上記コードの 11 行目から 18 行目では、乱数を生成することでキーを継続的に生成し、計算によって複雑さを増しています。 lowerbound と upperbound の値は、実際には暗号化に使用する ASCII 文字の範囲です。以下は生成されたキー ファイルの例です。 208123915925183361116049369344372701567721435181102718332639307390344373445407 524316475863232913993383189547474747394154915312639841226741894189965623523913 011164730113445201935692839710274127251577929493941487145611337531549110895367 593586318332391170941272701152344371709270125776235313540032267139933835677407 617384135696111239130732949469623520815987524358635491542913374933524334454251 400327015367133759324537171709152357391089524342514685239122673135531363151191 833412771743139654… ***、キーをサーバー上の安全な場所に保存する必要があります。その後、そのキーと XOR などの暗号化アルゴリズムを使用して、ユーザー情報を暗号化/復号化できます。前のセクションで説明した XOR でこのキーを使用する方法は非常に簡単なので、詳細には説明しません。 オリジナル: http://levi.cg.am/?p=800 【編集者のおすすめ】
|
<<: ドイツのセキュリティ専門家がGPRS暗号化アルゴリズムの解読に成功
>>: SQL Server データ マイニング: クラスタリング アルゴリズムとシーケンシャル クラスタリング アルゴリズムの理解
暴走列車が線路を走っています。5人が線路に縛られており、列車に轢かれそうになっています。この時点で、...
1. 検索セマンティックモデルの現状ERNIE: 知識統合による表現の強化は、中国語の NLP タス...
[[198229]]転移学習転移学習とは、ある問題で訓練したモデルを、簡単な調整で新しい問題に適した...
Turbonomic の買収計画により、IBM はビジネスと IT 全体にわたって人工知能の自動化機...
[51CTO.comより] 徐克氏は百度で検索とスマートレコメンデーションの分野で長年勤務。2015...
陳一然教授の論文が賞を受賞しました!この顔認識/分析に関する論文は、2024 IEEE CIS TE...
高レベルAPIとはディープラーニングは、人工知能時代の中核技術として、近年、学術界と産業界の両方でま...
たった今、百度が公式発表しました。自動運転車は2018年に量産される予定です。 Subversion...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
2023年に終了した国際学術会議AIBT 2023において、Ratidar Technologies...