一般的に使用されるデータ暗号化アルゴリズムのルール(PHP)

1.辞書の並べ替え、およびMD5暗号化(フィールド= 1つのフィールド2フィールド値=&フィールド値プラスキー)

/ ** 
* @paramの$配列は、データを暗号化する必要があります
* @param $ signKey暗号化キー
* @return文字列キー付きMD5結果
* /
ファンクション・サイン(配列$、$のsignkey){
ksort($配列); //辞書はソート(昇順)
の$ STR = ""; //結果は=値&KEY2 =値&KEY1に結合され signkey フォーマット
foreachのを($配列として$ K => $ V){
$ STR = $ K '='の$ V「&.... 「;
}
$ = STR $ STR $ signkey ;. signkey //追加MD5($ strの)を返す(需要が暗号化キーを削除&結合する必要がある場合、関数は最後のsubstr PHPアンパサンドを削除するために使用することができます)。 }

 

秘密鍵の暗号化と署名の検証を解読するための秘密鍵を暗号化および復号化する2.rsa公開鍵

/ ** 
*、公開鍵暗号方式
* @param unknown_type $ sourcestr暗号化された文字列
* @param unknown_type $公開公開鍵
* /
関数publickey_encodeing($ sourcestr、公開鍵$)
{
  //あなたは、公開鍵を検証できる記入するとき、それがフォーマットまたは未フォーマットされているかどうかを確認するために、公共を初期化します。
公開= $( "PUBLIC KEYは----- ----- BEGIN" "str_replace"、公開鍵を$)を;
$公開= str_replace( "PUBLIC KEY ----- ----- END"、 " "公開鍵$);
$公開= str_replace(" \ N- ""」、公開鍵を$);
。$ =公開'PUBLIC KEYをBEGIN ----- -----' PHP_EOL.wordwrap(公開鍵$ 64 、 "\ n"は、真) .PHP_EOL .'----- END PUBLIC KEY -----「;

$ pubkeyid = openssl_get_publickey($の公開) ; //は、 キーリソースIDを生成
使用してIF(openssl_public_encrypt($ sourcestr、crypttext $、$ pubkeyid、OPENSSL_PKCS1_PADDING))// OPENSSL_PKCS1_PADDINGのRSA_PKCS1_PADDING充填モード
{
戻りの$ crypttextを;
}
FALSEを返します;
}

/ ** 
*復号公開鍵
* /
関数publickey_decodeing($ crypttext、公開鍵$)
{
    //あなたは、公開鍵を検証できる記入するとき、それがフォーマットまたは未フォーマットされているかどうかを確認するために、公共を初期化します。
公開= $( "PUBLIC KEYは----- ----- BEGIN" "str_replace"、公開鍵を$)を;
$公開= str_replace( "PUBLIC KEY ----- ----- END"、 " "公開鍵$);
$公開= str_replace(" \ N- ""」、公開鍵を$);
。$ =公開'PUBLIC KEYをBEGIN ----- -----' PHP_EOL.wordwrap(公開鍵$ 64 、 "\ n"は、真) .PHP_EOL .'----- END PUBLIC KEY -----「;

$ pubkeyid = openssl_get_publickey($の公開) ; //は、 キーリソースIDを生成する
IF(openssl_public_decrypt($ crypttext、sourcestr $、$ pubkeyid、OPENSSL_PKCS1_PADDING))//使用OPENSSL_PKCS1_PADDING RSA_PKCS1_PADDING充填モードは
、{
$ sourcestrを返す;
}
FALSEを返します;
}
/ ** 
*秘密鍵を復号化するために
* /
関数privatekey_decodeing($のcrypttext、$のPrivateKeyを)
{
//秘密鍵を初期化するには、保証は、フォーマットされたか、フォーマットされていないかどうかは、秘密鍵を確認することができます記入したとき。
str_replaceのPrivateKey = $( "RSA PRIVATE KEY ----- ----- BEGIN" ""、$のPrivateKey);
$のPrivateKey = str_replace( "RSA PRIVATE KEY ----- ----- END" 、 ""、$のPrivateKey);
$のPrivateKey = str_replace( "\ N-"、 ""、$のPrivateKey);

。のPrivateKey $ = "RSA PRIVATE KEY ----- ----- BEGIN"の値は、PHP_EOL .wordwrap($です真の)値のPrivateKey、64、 "\ n-は"、PHP_EOLである"RSA PRIVATE KEY ----- ----- END"; ..

$ prikeyid = openssl_get_privatekey($のPrivateKey);
IF(openssl_private_decrypt(crypttext $、$ sourcestr、 $のprikeyid、
OPENSSL_PKCS1_PADDINGは)) {
$ sourcestr返します。
}
FALSEを返します。
}


/ **
*秘密鍵暗号化
* /
関数privatekey_encodeing($ sourcestr、$のPrivateKey)
{

//あなたが記入したときに、秘密鍵を検証できるフォーマットされたか、フォーマットされていないかどうか、秘密鍵、保証を、初期化します。
str_replaceのPrivateKey = $( "RSA PRIVATE KEY ----- ----- BEGIN" ""、$のPrivateKey);
$のPrivateKey = str_replace( "RSA PRIVATE KEY ----- ----- END" 、 ""、$のPrivateKey);
$のPrivateKey = str_replace( "\ N-"、 ""、$のPrivateKey);

。のPrivateKey $ = "RSA PRIVATE KEY ----- ----- BEGIN"の値は、PHP_EOL .wordwrap($です真の)値のPrivateKey、64、 "\ n-は"、PHP_EOLである"RSA PRIVATE KEY ----- ----- END"; ..
$ prikeyid = openssl_get_privatekey($のPrivateKey);
IF(openssl_private_encrypt(sourcestr $、$ crypttext、 $のprikeyid、
OPENSSL_PKCS1_PADDINGは)) {
$ crypttext返します。
}
FALSEを返します。
}


/ ** RSA署名が
* $データデータが署名される
* $ priKey民間企業
*商人の秘密鍵で署名
* MD5アルゴリズムダイジェスト使用
*最後の署名に必要なbase64エンコード
*リターンサイン署名
* /
機能Rsasign(データ$、$をprikey){
// opensslのキー変換
)$のopenssl_get_privatekey RES =($のprikeyを;

//建てのopenssl署名メソッドの呼び出し、署名サイン$の生成
($データは、$、$ RES、OPENSSL_ALGO_MD5を)サインopenssl_signを;

//解放資源
openssl_free_key ($ RES);

// Base64エンコードの
$ = BASE64_ENCODE($記号)ログイン;
リターン$記号;
}


/ ** RSA試験チェック
*の$データデータを署名対象
* $記号は、署名テストチェックする必要がある
* $のpubkeyで公開鍵
*リターンBOOLによって試験値かどうかをチェックする
* /
機能Rsaverify($データ、記号$、$のpubkeyで){
//キーのフォーマットは、opensslのに変換されます
$ openssl_get_publickey RES =($のpubkeyで);

//戻りブール値スタンプされて内蔵の方法OpenSSLを呼び出し
ます$ result =(ブール値)openssl_verify( $データ、BASE64_DECODE($記号)、$ RES、OPENSSL_ALGO_MD5 );

//解放資源
openssl_free_key($ RES);

成功したリソースかどうか//戻り
リターンが検索結果を$;
}





おすすめ

転載: www.cnblogs.com/shuniuniu/p/11326463.html