ホームページ  >  記事  >  バックエンド開発  >  PHPでの対称暗号化アルゴリズムの実装

PHPでの対称暗号化アルゴリズムの実装

墨辰丷
墨辰丷オリジナル
2018-05-26 16:42:382001ブラウズ

最近、急に機密事項をデータベースに保存したいと思い、他人がデータベースに入っても内容を理解できないようにする方法を考えました。そのため、唯一の方法は暗号化することですが、それでも暗号化する必要があります。対称暗号化アルゴリズムをいくつか見つけて、それを確認したいときに復号化できます。以下では、PHP での単純な対称暗号化アルゴリズムの実装を紹介します。

前書き

私はインターネット上で PHP 用の優れた対称暗号化アルゴリズムを見つけました。PHP 構文環境には、urlencode と urldecode、base64_encode および Base64_decode を備えた対称アルゴリズムがありますが、これらの組み込みアルゴリズムは暗号化アルゴリズムと呼ぶことはできず、符号化方式とのみ呼ぶことができます。ただし、これらを使用して何らかの処理を実行し、単純な暗号化および復号化アルゴリズムを実装することができます。

今回の暗号化および復号化アルゴリズムはbase64を使用して適応されています。通常、base64_encode($str) によって生成された文字列を使用します。何も処理せずに、base64_decode() は前の文字列に変換して戻すことができます。 base64_encode() 以降の文字列に変換すると、変換されても独自の文字列ではなくなります。 base64_encode($str)产生的字符串,不经过任何的加工的话,base64_decode()就能转回我们之前的字符串;可是如果我们在base64_encode()之后的字符串里插入几个字符呢,那他就转不回来了,即使转过来也不是我们自己的字符串。

示例代码如下:

 <?php
 $content = "大家好,我是中国人,你是谁";

 /**
 * 简单对称加密算法之加密
 * @param String $string 需要加密的字串
 * @param String $skey 加密EKY
 * @return String
 */
 function encode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
 $strArr = str_split(base64_encode($string));
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key < $strCount && $strArr[$key].=$value;
 return str_replace(array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), join(&#39;&#39;, $strArr));
 }

 /**
 * 简单对称加密算法之解密
 * @param String $string 需要解密的字串
 * @param String $skey 解密KEY
 * @return String
 */
 function decode($string = &#39;&#39;, $skey = &#39;wenzi&#39;) {
 $strArr = str_split(str_replace(array(&#39;O0O0O&#39;, &#39;o000o&#39;, &#39;oo00o&#39;), array(&#39;=&#39;, &#39;+&#39;, &#39;/&#39;), $string), 2);
 $strCount = count($strArr);
 foreach (str_split($skey) as $key => $value)
  $key <= $strCount && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0];
 return base64_decode(join(&#39;&#39;, $strArr));
 }

 echo &#39;<pre class="brush:php;toolbar:false">&#39;;
 echo "string : " . $content . " <br />";
 echo "encode : " . ($enstring = encode($content)) . &#39;<br />&#39;;
 echo "decode : " . decode($enstring);

 exit();

上面的算法里我们可以看到:我们把base64_encode()

サンプルコードは次のとおりです:

rrreee

上記のアルゴリズムからわかるように、base64_encode()によって生成された文字を挿入します。 > 事前にキーを設定し、その中の特殊文字を置き換えます。たとえ他​​の人がそのような文字列を見ても、それが何であるかわかりません。もちろん、キーを文字列に逆方向に挿入する、キーを Base64 化してから挿入するなど、ここで若干の改善を行うことができます。キーを挿入した後、再度 Base64 化します。

もちろん、復号化は暗号化の逆方向です。しばらく考えた後、復号化の原理に気づきました。文字列に文字を挿入する前に、復号化するときにそれらを抽出する必要があります。暗号化された文字列 各配列内の 2 つの要素ごとにグループ化し、2 番目の文字がキー内にあるかどうかを判断します。そうである場合、最初の文字は元の Base64 の文字です。 以上がこの記事の全内容です、皆様の学習のお役に立てれば幸いです。

関連する推奨事項: PHP は再帰を使用します
アルゴリズム

配列の無限走査

PHP でよく使用される並べ替え
アルゴリズム

詳細な例

PHPでよく使われる

アルゴリズム 🎜データの詳しい説明構造例 🎜🎜🎜🎜🎜🎜🎜🎜🎜

以上がPHPでの対称暗号化アルゴリズムの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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