ホームページ  >  記事  >  バックエンド開発  >  php は、DES、Blowfish、MD5 アルゴリズム関数 crypt() を使用して暗号化された文字列を返します。

php は、DES、Blowfish、MD5 アルゴリズム関数 crypt() を使用して暗号化された文字列を返します。

黄舟
黄舟オリジナル
2017-11-02 10:29:192046ブラウズ

定義と使用法

crypt() 関数は、DES、Blowfish、または MD5 アルゴリズムを使用して暗号化された string を返します。

この関数はオペレーティング システムごとに動作が異なり、一部のオペレーティング システムでは複数のアルゴリズム タイプがサポートされています。インストール時に、PHP は利用可能なアルゴリズムと使用されるアルゴリズムを確認します。

正確なアルゴリズムは、salt パラメータの形式と長さによって異なります。 Salt では、特定の暗号化方式を使用して特定の文字列から生成される文字列の数を増やすことで、暗号化の安全性を高めることができます。

crypt() 関数で使用するいくつかの 定数を次に示します。これらの定数値は、インストール時に PHP によって設定されます。

定数:

  • [CRYPT_SALT_LENGTH] - デフォルトの暗号化の長さ。長さ 2 の標準 DES 暗号化を使用します

  • [CRYPT_STD_DES] - アルファベット「./0-9A-Za-z」の 2 文字のソルトを使用した標準 DES ベースの暗号化。ソルトで無効な文字を使用すると、関数が失敗します。

  • [CRYPT_EXT_DES] - 1 つのアンダースコア、その後に 4 バイトの反復番号と 4 バイトのソルトで構成される 9 文字のソルトを使用した拡張 DES ベースの暗号化。これらは、最下位文字から順に、それぞれ 6 ビットの印刷可能文字としてエンコードされます。値0~63は「./0-9A-Za-z」としてエンコードされます。ソルトで無効な文字を使用すると、関数が失敗します。

  • [CRYPT_MD5] - $1$ で始まる 12 文字のソルトを使用した MD5 暗号化。

  • [CRYPT_BLOWFISH] - Blowfish 暗号化には、$2a$、$2x$、または $2y$ で始まるソルト、2 桁のコスト パラメーター "$"、およびアルファベット "./0-9A- 22 文字" が含まれます。ザ・ズ」。アルファベット以外の文字を使用すると、関数は長さ 0 の文字列を返します。 "$" 引数は、Blowfish ベースのハッシュ アルゴリズムの反復回数の底 2 の対数であり、04 ~ 31 の範囲内である必要があります。この範囲外の値を指定すると、関数が失敗します。

  • [CRYPT_SHA_256] - 16 文字のソルトを使用した SHA-256 暗号化 ($5$ から)。ソルト文字列が「rounds=ecb5fc74e9cd1f249d43a2bdbf2f239d$」で始まる場合、N の数値は、Blowfish のコスト パラメーターと同様に、ハッシュ ラウンドが実行される回数を表すために使用されます。デフォルトのループ数は 5000、最小値は 1000、最大値は 999,999,999 です。この範囲外の N の値は、最も近い境界値に変換されます。

  • [CRYPT_SHA_512] - 16 文字のソルトを使用した SHA-512 暗号化 ($6$ から)。ソルト文字列が「rounds=ecb5fc74e9cd1f249d43a2bdbf2f239d$」で始まる場合、N の数値は、Blowfish のコスト パラメーターと同様に、ハッシュ ラウンドが実行される回数を表すために使用されます。デフォルトのループ数は 5000、最小値は 1000、最大値は 999,999,999 です。この範囲外の N の値は、最も近い境界値に変換されます。

この関数が複数のアルゴリズムをサポートするシステムでは、上記の定数はサポートされている場合は「1」に設定され、サポートされていない場合は「0」に設定されます。

: 対応する復号化関数はありません。 crypt() 関数は一方向アルゴリズムを使用します。

構文

crypt(str,salt)

パラメータ 説明

str 必須。エンコードする文字列を指定します。

塩 オプション。エンコードの安全性を高めるために、エンコードされる文字の数を増やすために使用される文字列。ソルト引数が指定されていない場合は、関数が呼び出されるたびにソルト引数がランダムに生成されます。

技術的な詳細

戻り値: 暗号化された文字列を返すか、失敗した場合は、ソルトとは異なることが保証された 13 文字未満の文字列を返します。

PHP バージョン: 4+

更新日志:         在 PHP 5.3.7 中,新增了 $2x$ 和 $2y$ Blowfish 模式,用来处理潜在的高位攻击。                          

                          在 PHP 5.3.2 中,新增了常量 SHA-256 和 SHA-512。

                          自 PHP 5.3.2 起,Blowfish 在无效的循环将返回 "failure" 字符串("*0" 或 "*1"),而不是后退到 DES。
                          自 PHP 5.3.0 起,PHP 自带 MD5 加密实现、标准 DES 实现、扩展 DES 实现以及 Blowfish 算法。如果系统不支持上述的算法,将使用 PHP 自带的算法实现。    

实例

实例 1

在本实例中,我们将测试不同的算法:

<?php
// 2 character salt
if (CRYPT_STD_DES == 1)
{
echo "Standard DES: ".crypt(&#39;something&#39;,&#39;st&#39;)."n<br>"; 
}
else
{
echo "Standard DES not supported.n<br>";
}

// 4 character salt
if (CRYPT_EXT_DES == 1)
{
echo "Extended DES: ".crypt(&#39;something&#39;,&#39;_S4..some&#39;)."n<br>";
}
else
{
echo "Extended DES not supported.n<br>";
}

// 12 character salt starting with $1$ 
if (CRYPT_MD5 == 1)
{
echo "MD5: ".crypt(&#39;something&#39;,&#39;$1$somethin$&#39;)."n<br>"; 
}
else
{
echo "MD5 not supported.n<br>";
}

// Salt starting with $2a$. The two digit cost parameter: 09. 22 characters 
if (CRYPT_BLOWFISH == 1)
{
echo "Blowfish: ".crypt(&#39;something&#39;,&#39;$2a$09$anexamplestringforsalt$&#39;)."n<br>"; 
}
else
{
echo "Blowfish DES not supported.n<br>";
}

// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA256 == 1) 
{
echo "SHA-256: ".crypt(&#39;something&#39;,&#39;$5$rounds=5000$anexamplestringforsalt$&#39;)."n<br>"; }
else
{
echo "SHA-256 not supported.n<br>";
}

// 16 character salt starting with $5$. The default number of rounds is 5000.
if (CRYPT_SHA512 == 1) 
{
echo "SHA-512: ".crypt(&#39;something&#39;,&#39;$6$rounds=5000$anexamplestringforsalt$&#39;); 
}
else
{
echo "SHA-512 not supported.";
}
?>

上面的代码输出如下(取决于操作系统):

Standard DES: stqAdD7zlbByI
Extended DES: _S4..someQXidlBpTUu6
MD5: $1$somethin$4NZKrUlY6r7K7.rdEOZ0w.
Blowfish: $2a$09$anexamplestringforsaleLouKejcjRlExmf1671qw3Khl49R3dfu
SHA-256: $5$rounds=5000$anexamplestringf$KIrctqsxo2wrPg5Ag/hs4jTi4PmoNKQUGWFXlVy9vu9
SHA-512: $6$rounds=5000$anexamplestringf$Oo0skOAdUFXkQxJpwzO05wgRHG0dhuaPBaOU/
oNbGpCEKlf/7oVM5wn6AN0w2vwUgA0O24oLzGQpp1XKI6LLQ0.

一、代码

<?php 
 $str = &#39;应用crypt()函数进行单向加密!&#39;;     //声明字符串变量$str 
 echo &#39;加密前$str的值为:&#39;.$str; 
 $crypttostr = crypt($str);      //对变量$str加密 
 echo &#39;<p>加密后$str的值为:&#39;.$crypttostr;  //输出加密后的变量 
?>

二、运行结果

参数不带salt,每次加密得出的密文都不一样。
加密前$str的值为:应用crypt()函数进行单向加密!
加密后$str的值为:$1$Re4.Gg4.$D.yd00xX0fFfIfp6KrKGN0

以上がphp は、DES、Blowfish、MD5 アルゴリズム関数 crypt() を使用して暗号化された文字列を返します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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