暗号化アルゴリズムと機能の使用PHP

キーワード:
不可逆:
MD5();デフォルト不可逆的に32進数で返される文字列のMD5ハッシュ計算
のcrypt()と、文字列の一方向ハッシュは、塩の価値不可逆混乱ができる
(SHA1)を、算出列SHA1デフォルト値は、ハッシュ値の長さが40文字の16進数を返します。不可逆的な
ハッシュ()ハッシュ($前に、 $データ); $前には、 例えば、ハッシュアルゴリズムを使用して暗号化されます。「MD5」、「SHA256」 、「haval160,4」 などが挙げられます。$データは、不可逆的に暗号化するデータである
暗号化されたパスワード$ハッシュ= password_hash($ passwod、 - ()password_hashを PASSWORD_DEFAULT);. PHPが正式に、暗号化ユーザ・パスワードに、このようなLaravelがあるなど、多くの人気のあるフレームワークをこの方法をお勧めしますこの暗号化モードを使用。

リバーシブル:
伝送STR = $ "特定を保護するために使用されたURLエンコードされた暗号化でurlencode()urldecode()URL文字列http://guojiadong.com?name= " .urlencode( '&123 guojiadong');可逆
Base64エンコード暗号BASE64_ENCODE()BASE64_DECODE( )は、本質はもちろん、転送ファイルにより助長されますASCLLコードにbase64で暗号化データにあることを言った、可逆的でbase64で転送ファイルの役割

拡張PHPのOpenSSL
のOpenSSL OpenSSLの暗号化拡張長期使用は、PHP関連の暗号化および復号化の複数の機能を包装するため、大幅に暗号化データの復号化を容易にします。一般的に使用される機能は以下のとおりです。
関連する対称暗号化:
AES対称暗号
https://blog.csdn.net/fangkang7/article/details/94607123
文字列openssl_encrypt(データ列$、$メソッド文字列、文字列$パスワード)
暗号化された文字列のopenssl_decryptを($、 'AES-128-ECB'、 BASE64_DECODE($キー)、OPENSSL_RAW_DATA)。

RSA非対称公開鍵と秘密鍵暗号1ペア
https://www.cnblogs.com/makalochen/p/10845033.html

証明書から抽出されたopenssl_pkey_get_public()公開鍵
証明書から秘密鍵を抽出するopenssl_pkey_get_private()
openssl_public_encryptを()公開鍵暗号
openssl_private_decrypt()復号化するための秘密鍵
openssl_private_encrypt()秘密鍵暗号
openssl_public_decrypt()解読するための公開鍵
(BASE64_ENCODE)のデータをbase64を再利用コーディング
BASE64_DECODE()データBASE64のデコードを

https://blog.csdn.net/qq_38483191/article/details/80513448
https://www.jianshu.com/p/c15233d99fa8
https://www.jb51.net/article/170082.htm
HTTPS:// WWW .jb51.net / Articleこの記事は、/ 128149.htmた
/ *
対称暗号化アルゴリズムと非対称暗号化アルゴリズム:暗号化アルゴリズムは、一般的に2種類に分かれています。
対称暗号化
対称暗号化アルゴリズムは、同じキーメッセージの送信者と受信者の使用であり、送信者は、暗号化キーファイルを使用して、
受信機は、取得した情報を復号化するために同じキーを使用しています。一般的な対称暗号化アルゴリズム:DES / AES / 3DES
速度は、ファイルのサイズは、暗号化の前後でほとんど変化しないが、ストレージ・キーは大きな問題である:対称暗号化アルゴリズムがされている機能
、メッセージの送信者と受信者のいずれかのためにキー損失は、不安全になるために情報の伝達につながることができます。
非対称暗号化
非対称暗号化および対称暗号コントラスト、非対称暗号化核となるアイデアは、対向の鍵のペアを使用することで
、公開鍵と秘密鍵の中に独自のセキュリティ、公開鍵および公開保存秘密鍵を。データは、公開鍵で暗号化されている場合、公開鍵と秘密鍵は、ペアである
あなたが秘密鍵でデータを暗号化する場合は、直前にのみ対応する公開鍵で復号を送ることができ、データ、復号化できるだけで対応する秘密鍵でライン上の受信者の公開鍵暗号化を使用。
RSA / DSAアルゴリズムの一般的な非対称暗号化:なし、非対称暗号化キーの保存が、その計算能力はありませんが、暗号化は、非常に遅く、時には我々は、データブロックの暗号化の大きなブロックを実行する必要があります。
デジタル署名
データの整合性を保証するために、ハッシュ関数によりハッシュ値を計算する必要性は、ハッシュ値は、デジタル署名と呼ばれます。その特徴は:
元のデータは多くの結果の長さと同じであるかどうかを、
同一の入力及び出力は同じであり、
入力の小さな変化に大きな変化をもたらすであろう、
暗号化プロセスは不可逆的であり、ハッシングによって元に価値があることはできませんデータ、
一般的なデジタル署名アルゴリズムMD5、HASH1アルゴリズム。
拡張PHPのOpenSSL
のOpenSSL OpenSSLの暗号化拡張長期使用は、PHP関連の暗号化および復号化の複数の機能を包装するため、大幅に暗号化データの復号化を容易にします。一般的に使用される機能は以下のとおりです。
対称暗号化関連:
文字列openssl_encrypt(文字列$データ、$メソッド文字列、文字列$パスワード)
データのための$のデータを暗号化する、$メソッドが使用する暗号化の方法があり、$ passwordは、使用する秘密がありますキー、関数は暗号化されたデータを返し、
リスト$法が用いopenssl_get_cipher_methods(であっても良い)を取得するために
復号化ファンクション文字列openssl_encrypt(文字列$データ、文字列 $方法、文字列$パスワード)
非対称暗号化関連を:
彼らだけ渡す必要があります証明書ファイル(通常の.pemファイル);
暗号化された$は、参照変数で、暗号化されたデータは、この変数に格納されます; $キー、着信に$データが暗号化されるデータであり、暗号化データへの公開鍵を使用して公開鍵データ。
暗号化されたデータパケットが原因で、それが必要$パディング(フィルが充填された)であり、正確にビット暗号化されたビットの整数倍でないかもしれない、
$パディングオプションがOPENSSL_PKCS1_PADDING、OPENSSL_NO_PADDING、PKCS1が充填されている持っている、またはフィラーを使用しないことができます;
署名機能:署名されるべきデータとして$データ、署名データ参照変数の$署名、秘密鍵$が使用される署名をpriv_key_id;使用される$ signature_alg署名アルゴリズム
、アルゴリズムのリストできopenssl_get_md_methods()得られた
試験チェック機能:相対の署名機能、それが公開鍵に対応する秘密鍵に渡され、結果として、署名検証の結果、成功、失敗は、0 -1エラーを示します。

  • /
    /
  • の例をもとにBaiduのクラウドAPI
  • 、キーSKとして最初の16ビットを使用して、AES 128ビット暗号化アルゴリズムを使用して、常にパスワードの暗号化
  • 生成された暗号化されたバイトストリームは、バイナリ進数を転送する必要があり、文字列がサーバに渡さ
  • * /
    機能aes128WithFirst16Char(ADMINPASS $、$ secretAccessKey)
    {
    $ ADMINPASS = pkcs5Pad($ ADMINPASS);
    // 16ビットのキー値として取られる
    $ secretAccessKey = SUBSTR($ secretAccessKey、0、16);
    // AES暗号
    $ =暗号化された($ ADMINPASS、 'ECB-AES-128'、$ secretAccessKey、OPENSSL_RAW_DATA)openssl_encrypt;
    //変換文字列の16進
    リターンBIN2HEX(SUBSTR($暗号化され、0、16));
    }
    //パスワード16ビットに充填
    関数pkcs5Pad($ ADMINPASS)
    {
    $ PAD = 16 - (STRLEN($ ADMINPASS)%16);
    (CHR($ PAD)、$ PAD)を$ ADMINPASSにおけるSTR_Repeatを返す;
    }
    エコーaes128WithFirst16Char(「暗号化されたパスワード''キー値「);

序文

PHPは、個々のハッシュされ、暗号化、対称暗号化、非対称暗号化これらのカテゴリに分かれています。通常のMD5ハッシュ、暗号のように、SHA1これは、個々の暗号化ハッシュは不可逆的である、単一のハッシュ暗号化です。同じ暗号化と復号鍵に使用されている、対称暗号化で可逆的であるURLエンコーディング、base64エンコーディング、などです。非対称暗号化、暗号化と復号鍵のほかにもありますが、セキュリティから、あなたは解読するために再び戻って考える場合は暗号化された情報は、非対称暗号化は間違いなく最も安全な方法ですが、同じではありません。

MD5暗号化

MD5暗号化アルゴリズムは、PHPで最も一般的な暗号化アルゴリズムで、このアルゴリズムは、一般的に、情報セキュリティのユーザーを確保するために、ユーザーのパスワードやその他の情報を暗号化するために使用される可逆的ではありません。 - RFC 1321説明からMD5メッセージダイジェストアルゴリズム:MD5メッセージは、入力値としてアルゴリズム任意の長さの情報をダイジェスト、および128ビットの「指紋」またはにそれを変換する「メッセージダイジェスト」値が表現します入力値、およびその結果として変換された値です。主に設計されたデジタル署名アプリケーションのためのMD5アルゴリズムを、このアプリケーションでは、デジタル署名、大きなファイルは、ここでの暗号化処理により、(暗号化されますが、暗号化システムである:で[RSAなど]公開鍵圧縮前に、安全な方法で)秘密鍵を設定し、完了しました。さて、例を与えるために、

<?php

//这里是一个字符串

$str="this is zifuchuan";

//通过MD5加密函数加密

$res=md5($str);//在PHP中,MD5()函数还有第二个参数,为bool类型,当为TRUE是返回的加密是16字符原始//二进制格式字符串,当为FALSE是返回32位的16进制,默认为false,一般都默认//返回二进制

$res=md5($str,true);

?>

クリプト()暗号化アルゴリズム

crypt()暗号化アルゴリズム、暗号化アルゴリズムは可逆的ではない、彼は2つのパラメータの文字列を持っている、暗号化されるべきであり、他は、塩の値(または文字列原因干渉)で、彼らのように、第2パラメータを指定しない場合これは、ランダムな干渉の文字列を生成し、MD5は仕方を暗号化しています。また、異なるオペレーティングシステム上でこの機能のフォームが同じではありません、それが自動的に検出します。たとえば。

<?php

//需要加密的字符串

$str="this is string";

//使用crypt加密,不指定盐值

$res=crypt($str);//指定盐值,但是盐值只能写两位,如果超过了则只会取前两位,在某些系统中会直接返回FALSE

$res=crypt($str,'jm');

?>

SHA1の暗号化アルゴリズム

SHA1暗号化アルゴリズム及びMD5アルゴリズム不可逆ように、2つのパラメータ、文字列が存在するが暗号化される、第二はブール値であり、第二パラメータがTRUEの場合に指定文字列があれば、バイナリ形式で返されデフォルトはFALSEである代わりに、それは例えば、40進形式の文字列を返します

<?php

//需要加密的字符串

$str="this is string";

//通过sha1进行加密

$res=sha1($str);

//通过指定第二个参数加密

$res=sha1($str,true);

?>

URLエンコードの暗号化

当社のウェブサイトでは、ユーザーが直接この部分のために、アドレスバーの質量の参加にさらされ、このように暗号化は可逆的であり、基本的な暗号化アルゴリズムを使用することに注意を払う、我々は単にそれを暗号化することができますので、平文ある、つまり、彼は、私たちは、あなたが本当に暗号化を達成する必要がある場合は、暗号化アルゴリズムが推奨されていないので、復号後にそれを見ることができます暗号文暗号化されたと述べました。

PHP URLで暗号化と復号化機能のための2つでurlencodeとurldecodeを使用。

http://www.guojiadong.com?name=guojiadong&amp;amp;phone=112

私たちは、このアドレスを暗号化することができます

<?php

//需要加密的网址

$str = "http://www.guojiadong.com?name=guojiadong&phone=112";

//使用urlencode加密

$res = urlencode($str);

//使用urldecode解密

$result = urldecode($res);

?>

それ以来、この方法を暗号化し、暗号化もあまり差がある解読、我々は彼の目的は何である必要がありますか?私たちは簡単に破ることができる暗号化された文字列のこの文字列を壊したくたい、実際には、これら2つの関数は彼の特別な役割、暗号化に加えて、その役割を持っている、もちろん、これはこれは、暗号化のメインテーマであるため、ポイントの横にあるが、拡張機能として、まだそれを言います。

<?php

//在HTML传参到后台中的时候如果我们想把&作为参数传到后台,在没有加密之前,浏览器会把他作为

//参数分隔符

//例如:http://guojiadong.com?name=guojiadong&amp;123,

我们想把guojiadong&amp;123作为参数传给

//后台,这个时候直接这样写后台得到的数据却只得到name的值为guojiadong,而123确作为变量

//当然了用一个数字做变量是不合法的,但是浏览器确并不这么智能的区分他

//为了解决这个问题我们就可以对这部分字符编码

$str="http://guojiadong.com?name=".urlencode('guojiadong&123');

//这样我们传过来的值就变成了name = guojiadong&123

?>

Base64でエンコードする暗号化

base64で暗号化アルゴリズムは、このセクションで記述されたが、我々は、それを注意したが、彼はメインの暗号化に使用されていなかったが、また、ほとんどのプログラムから、彼の主な役割は、暗号化データの暗号化への手段として彼を使用するほとんど誰もありません何を行うために使用されますか?これは、base64暗号化メカニズムを言うことです。

base64で暗号化は、本質的に、このようなもちろん、転送ファイルにより助長されますAscll接続へのコードの山になり、文字列を符号化された画像base64で、としてASCLLコードにデータを変換することであると言うで、BASE64でファイルの役割トランスミッション。たとえば、base64エンコーディングを使用してサーバーにファイルをアップロードするには、モバイルクライアントは、簡単にファイルを転送することができます。

base64で暗号化機能

base64_encode($data);

base64で復号化機能

base64_decode($data);

ハッシュ暗号化

ハッシュ暗号化は、文字列の特定の長さが不確実与えられた文字列に返されるので、これは単一のハッシュ暗号化を達成するための感覚は、本質的に、不可逆的です。使用

hash($ago,$data);

$アゴー例えば、使用されるハッシュアルゴリズムを指定することができます。「MD5」、「SHA256」、「haval160,4」などを。

$データが暗号化されるデータであり、

パスワードハッシュのAPIの暗号化

パスワードハッシュAPIは、それは私たちはいくつかの機能を使用するために以下のものを提供するために、主にある唯一のPHP 5.5の後に新機能です。

password_hash() – 对密码加密.

password_verify() – 验证已经加密的密码,检验其hash字串是否一致.

password_needs_rehash() – 给密码重新加密.

password_get_info() – 返回加密算法的名称和一些相关信息.

地下室()関数は、使用中は十分であるが、password_hash()我々のコードより簡単に行うことが、また、私たちのより良いセキュリティの保証を与え、今公式PHPは、この方法をお勧めしていることができないだけが、ユーザーのパスワードを暗号化するために、このようLaravel、この暗号化方式の多くの人気のフレームワークが使用されています。

$hash = password_hash($passwod, PASSWORD_DEFAULT);

はい、それは簡単で、1行のコードので、すべて完了です。

現在使用されてPASSWORD_DEFAULTは、私は上記の言うこれをお勧めしますので、bcryptのですが、パスワードハッシュのAPIのために良い結果を出すために、そして私はあなたが厳粛にパスワードハッシュのAPIをお勧めしなければならないと思います。あなたが、長さが60文字以上に設定する必要がありますが、データベース、パスワードフィールドにPASSWORD_DEFAULTコードが使用する暗号化、そしてテーブルであれば、あなたもPASSWORD_BCRYPT、この時、常に暗号化された文字列を使用することができることに留意すべきです長さは60の文字。

ここ、password_hash(使用)して、消費電力値(コスト)塩値(塩)を、提供することができないとして、あなたは一つの特性値、大きいを消費することができ、後者は理解コスト、より複雑な暗号化アルゴリズム、メモリ消費量はなります大きいです。あなたはソルト値と対応する消費値を指定する必要がある場合はもちろん、あなたは書くことができます。

$options = [

'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt

'cost' => 12 // the default cost is 10 ];

$hash = password_hash($password, PASSWORD_DEFAULT, $options);

密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:

if (password_verify($password, $hash)) {

// Pass }

else {

// Invalid

}

それはあなたが直接確認するために、(データベース内に存在)になる前に、当社の暗号化された文字列にpassword_verify使用することができ、非常に簡単です。

しかし、時には我々は突然ソルト値消費量の値について何を交換したり、強化したいな一日として、暗号化の我々の方法を変更する必要がある場合は、この時間は、我々は()関数をpassword_needs_rehashするために使用します。

if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {

// cost change to 12 $hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);

// don't forget to store the new hash!

}

只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证。

セイ短時間password_get_info()、この機能は一般的に以下の3つのメッセージを見ることができます。

algo – 算法实例

algoName – 算法名字

options – 加密时候的可选参数

著者:ドンソン
リンク:https://www.jianshu.com/p/c15233d99fa8
出典:ジェーンの本が
著者によって著作権で保護されています。著者は認可商業転載してください接触、非商用の転載は、ソースを明記してください。

おすすめ

転載: www.cnblogs.com/djwhome/p/12521673.html