ホームページ  >  記事  >  バックエンド開発  >  PHP で暗号化を実装するいくつかの方法の紹介、PHP で暗号化を実装するいくつかの方法_PHP チュートリアル

PHP で暗号化を実装するいくつかの方法の紹介、PHP で暗号化を実装するいくつかの方法_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:06:29777ブラウズ

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 -- オプションのソルト値文字列。指定しない場合、アルゴリズムの動作はさまざまなアルゴリズムの実装によって決定され、予測できない結末につながる可能性があります。

これも不可逆暗号化です。次のコードを実行します

コードをコピーします コードは次のとおりです:

$password = '123456';
$salt = "test" // 最初の 2 つだけを取ります
; echo crypt($password, $salt);

得られた結果はteMGKvBPcptKoです

自動ソルト値の使用例は次のとおりです:

コードをコピーします コードは次のとおりです:

$password = crypt('mypassword') // ソルト値を自動的に生成します
/* 異なるハッシュ アルゴリズムの使用によって発生する問題を回避するには、crypt() の完全な結果をパスワード検証のソルト値として使用する必要があります。 (前述したように、標準 DES アルゴリズムに基づくパスワード ハッシュでは 2 文字のソルトが使用されますが、MD5 アルゴリズムに基づくハッシュでは 12 文字のソルトが使用されます。) */
if (crypt('mypassword', $password) == $password) {
echo "パスワードが確認されました!";
}

実行結果は出力されたパスワードが検証されました!

さまざまなハッシュタイプでの crypt() の使用例は次のとおりです:

コードをコピーします コードは次のとおりです:

if (CRYPT_STD_DES == 1) {
echo '標準 DES: ' .crypt('rasmuslerdorf', 'rl') . }
if (CRYPT_EXT_DES == 1) {
echo '拡張 DES: ' . crypt('rasmuslerdorf', '_J9..rasm') . }
if (CRYPT_MD5 == 1) {
echo 'MD5: ' .crypt('rasmuslerdorf', '$1$rasmusle$') . }
if (CRYPT_BLOWFISH == 1) {
echo 'Blowfish: ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . }
if (CRYPT_SHA256 == 1) {
echo 'SHA-256: ' .crypt('rasmuslerdorf', '$5$rounds=5000$usesomesillystringforsalt$') . }
if (CRYPT_SHA512 == 1) {
echo 'SHA-512: ' .crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$') . }

結果は以下の通りです

標準 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_EXT_DES - DES アルゴリズムに基づく拡張ハッシュ。ソルトは、アンダースコアの後に 4 バイトのサイクル カウントと 4 バイトのソルトが続く 9 文字の文字列です。これらは、最下位ビットから順に、それぞれ 6 ビットの印刷可能な文字にエンコードされます。 0~63は「./0-9A-Za-z」としてエンコードされます。ソルト内で不正な文字を使用すると、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=$」で始まる場合、N の数値は、Blowfish アルゴリズムのコスト パラメーターと同様に、実行するハッシュ ラウンドの数を指定するために使用されます。デフォルトのループ数は 5000、最小値は 1000、最大値は 999,999,999 です。この範囲外の N は最も近い値に変換されます。
CRYPT_SHA512 - SHA-512 アルゴリズムは、ハッシュ化に $6$ で始まる 16 文字の文字列ソルトを使用します。ソルト文字列が「rounds=$」で始まる場合、N の数値は、Blowfish アルゴリズムのコスト パラメーターと同様に、実行するハッシュ ラウンドの数を指定するために使用されます。デフォルトのループ数は 5000、最小値は 1000、最大値は 999,999,999 です。この範囲外の N は最も近い値に変換されます。


3. Sha1暗号化


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

http://www.xxx.com/CraryPrimitiveMan/

RFC 3986に基づいてURLを暗号化する方法は次のとおりです:

コードをコピーします コードは次のとおりです:

関数 myUrlEncode($string) {
$entities = array('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D'、'%2B'、'%24'、'%2C'、'%2F'、'%3F'、'%25'、'%23'、'%5B'、'%5D') ;
$replacements = array('!', '*', "'", "(", ")", ";", ":", "@", "&", "=, "+", " $"、","、"/"、"?"、"%"、"#"、"["、"]");
戻り値 str_replace($entities, $replacements, urlencode($string));
}

5. Base64 情報のエンコードと暗号化

文字列base64_encode (文字列$data)

base64 を使用してデータをエンコードします。

このエンコーディングは、電子メールの本文など、非純粋な 8 ビット トランスポート層を介してバイナリ データを送信できるように設計されています。

Base64 でエンコードされたデータは、元のデータよりも約 33% 多くのスペースを占有します。

string Base64_decode ( string $data [, bool $strict = false ] )

base64 エンコードされたデータをデコードします。

パラメータ

data -- エンコードされたデータ。

strict -- 入力データが Base64 アルファベットを超える場合は FALSE を返します。

次のコードを実行します:

コードをコピーします コードは次のとおりです:

$name = 'CraryPrimitiveMan';
$encodeName =base64_encode($name);
echo $encodeName . "n";
echobase64_decode($encodeName);

結果は以下の通りです

コードをコピーします コードは次のとおりです:

Q3JhcnlQcmltaXRpdmVNYW4=
クレイリープリミティブマン

phpassをお勧めします

データベースに保存する前にユーザーパスワードをハッシュすることでユーザーパスワードを保護する標準的な方法である phpass 0.3 でテスト済み。 md5 や sha1 などの一般的に使用されるハッシュ アルゴリズムの多くは、ハッカーがこれらのアルゴリズムを使用するとパスワードを簡単に解読できるため、パスワードの保存には安全ではありません。

パスワードをハッシュする最も安全な方法は、bcrypt アルゴリズムを使用することです。オープンソースの phpass ライブラリは、この機能を使いやすいクラスで提供します。

コードをコピーします コードは次のとおりです:

// phpass ライブラリをインクルードします
require_once('phpass-03/PasswordHash.php')
// ポータブルではないようにハッシュを初期化します (これはより安全です)
$hasher = 新しいパスワードハッシュ(8, false);
// パスワードのハッシュ値を計算します。 $hashedPassword は、長さ 60 文字の文字列です。
$hashedPassword = $hasher->HashPassword('私の超クールなパスワード');
// これで $hashedPassword をデータベースに安全に保存できるようになりました
// ユーザーの入力内容 (生成されたハッシュ値) と、以前に計算したハッシュ値を比較することで、ユーザーが正しいパスワードを入力したかどうかを判断します
$hasher->CheckPassword('間違ったパスワード', $hashedPassword); // false
$hasher->CheckPassword('私の超クールなパスワード', $hashedPassword); // true
?>

以上がPHP暗号化方法に関するこの記事の紹介です。皆さんに気に入っていただければ幸いです。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/959105.html技術記事 PHP で暗号化を実装するいくつかの方法の紹介。PHP でのいくつかの暗号化方法は次のとおりです。 1. MD5 暗号化文字列 md5 (string $str [, bool $raw_output = false]) パラメーター str -...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。