ホームページ >バックエンド開発 >PHPチュートリアル >PHP で暗号化を実装するいくつかの方法の紹介、PHP で暗号化を実装するいくつかの方法_PHP チュートリアル
PHPの暗号化方式は以下の通りです
1. MD5暗号化
string md5 ( string $str [, bool $raw_output = false ] )
パラメータ
str -- 元の文字列。
raw_output -- オプションの raw_output が TRUE に設定されている場合、MD5 メッセージ ダイジェストは長さ 16 バイトの生のバイナリ形式で返されます。
これは不可逆的な暗号化です。次のコードを実行してください
$パスワード = '123456';
echo md5($password);
結果は e10adc3949ba59abbe56e057f20f883e です
2.Crype暗号化
string crypt ( string $str [, string $salt ] )
crypt() 標準の UNIX DES アルゴリズム、またはシステムで利用可能な別の代替アルゴリズムに基づいてハッシュ化された文字列を返します。
パラメータ
str -- ハッシュされる文字列。
salt -- オプションのソルト値文字列。指定しない場合、アルゴリズムの動作はさまざまなアルゴリズムの実装によって決定され、予測できない結末につながる可能性があります。
これも不可逆暗号化です。次のコードを実行します
得られた結果はteMGKvBPcptKoです
自動ソルト値の使用例は次のとおりです:
実行結果は出力されたパスワードが検証されました!
さまざまなハッシュタイプでの crypt() の使用例は次のとおりです:
結果は以下の通りです
標準 DES: rl.3StKT.4T8M
拡張 DES: _J9..rasmBYk8r9AiWNc
MD5: _
フグ: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256: $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
crypt() 関数がマルチハッシュをサポートするシステムでは、対応する型が利用可能かどうかに応じて、次の定数が 0 または 1 に設定されます。
CRYPT_STD_DES - 標準 DES アルゴリズムに基づくハッシュは、「./0-9A-Za-z」文字のうち 2 つをソルトとして使用します。ソルト内で不正な文字を使用すると、crypt() が失敗します。
CRYPT_MD5 - MD5 ハッシュでは、$1$ で始まる 12 文字の文字列ソルトが使用されます。
CRYPT_BLOWFISH - Blowfish アルゴリズムは次のソルトを使用します: "$2a$"、2 桁のコスト パラメーター、"$"、および "./0-9A-Za-z" の文字で構成される 64 ビット文字列。ソルトでこの範囲外の文字を使用すると、crypt() は空の文字列を返します。 2 桁のコスト パラメーターはループ数の底 2 の対数であり、その範囲は 04 ~ 31 です。この範囲を超えると、crypt() が失敗します。
CRYPT_SHA256 - SHA-256 アルゴリズムは、ハッシュ化に $5$ で始まる 16 文字の文字列ソルトを使用します。ソルト文字列が「rounds=
CRYPT_SHA512 - SHA-512 アルゴリズムは、ハッシュ化に $6$ で始まる 16 文字の文字列ソルトを使用します。ソルト文字列が「rounds=
string sha1 ( string $str [, bool $raw_output = false ] )
パラメータ
str -- 入力文字列。
raw_output -- オプションの raw_output パラメータが TRUE に設定されている場合、sha1 ダイジェストは 20 文字の長さの raw 形式で返されます。それ以外の場合、戻り値は 40 文字の 16 進数です。
これも不可逆的な暗号化です。次のコードを実行します:
$パスワード = '123456';
echo sha1($password);
得られた結果は 7c4a8d09ca3762af61e59520943dc26494f8941b です
上記のタイプは不可逆暗号化ですが、辞書を引くことで復号化することもできます。以下のアドレスは、上記の暗号化結果を復号する機能を提供します。
http://www.cmd5.com/
暗号化を追加しても意味がないと思いますか? 実際、暗号化が十分に複雑であれば、たとえば上記の 3 つの暗号化方式を混合して使用すると、解読される可能性は低くなります。 PHP 暗号化ライブラリを皆さんにお勧めします。
4. URL暗号化文字列urlencode (文字列$str)
この関数を使用すると、文字列をエンコードして URL のリクエスト部分で使用することが簡単になり、次のページに変数を渡すことも簡単になります。
-_ を除くすべての非英数字文字がパーセント記号 (%) に置き換えられ、その後に 2 つの 16 進数が続き、スペースがプラス記号 (+) としてエンコードされた文字列を返します。このエンコーディングは、WWW フォーム POST データのエンコーディングと同じであり、application/x-www-form-urlencoded メディア タイプと同じエンコーディングです。歴史的な理由により、このエンコーディングは、エンコーディング スペースがプラス記号 (+) であるという点で RFC1738 エンコーディングとは異なります。
文字列urldecode (文字列$str)
指定されたエンコードされた文字列内の任意の %## をデコードします。 プラス記号 (「+」) はスペース文字にデコードされます。
これは可逆暗号化です。暗号化には urlencode メソッドが使用され、復号化には urldecode メソッドが使用されます。
$url = 'http://www.xxx.com/CraryPrimitiveMan/';
$encodeUrl = urlencode($url);
echo $encodeUrl . "n";// Web ページに表示される場合は、n を
に変更します。
エコー urldecode($encodeUrl);
得られた結果は以下の通りです
http%3A%2F%2Fwww.xxx.com%2FCraryPrimitiveMan%2F
RFC 3986に基づいてURLを暗号化する方法は次のとおりです:
5. Base64 情報のエンコードと暗号化
文字列base64_encode (文字列$data)
base64 を使用してデータをエンコードします。
このエンコーディングは、電子メールの本文など、非純粋な 8 ビット トランスポート層を介してバイナリ データを送信できるように設計されています。
Base64 でエンコードされたデータは、元のデータよりも約 33% 多くのスペースを占有します。
string Base64_decode ( string $data [, bool $strict = false ] )
base64 エンコードされたデータをデコードします。
パラメータ
data -- エンコードされたデータ。
strict -- 入力データが Base64 アルファベットを超える場合は FALSE を返します。
次のコードを実行します:
結果は以下の通りです
phpassをお勧めします
データベースに保存する前にユーザーパスワードをハッシュすることでユーザーパスワードを保護する標準的な方法である phpass 0.3 でテスト済み。 md5 や sha1 などの一般的に使用されるハッシュ アルゴリズムの多くは、ハッカーがこれらのアルゴリズムを使用するとパスワードを簡単に解読できるため、パスワードの保存には安全ではありません。
パスワードをハッシュする最も安全な方法は、bcrypt アルゴリズムを使用することです。オープンソースの phpass ライブラリは、この機能を使いやすいクラスで提供します。
以上がPHP暗号化方法に関するこの記事の紹介です。皆さんに気に入っていただければ幸いです。