php openssl_Sign()構文+RSA公開鍵暗号解読,非対称暗号アルゴリズム詳細

7154 ワード

実は時々ブログを書くのが面倒だと思って、関数だけでブログを開きます.小さな意見のことですが、知っている人は多くのことをしているように見えます.あるいは、必要はありません.時間を無駄にして、知らない人は憂鬱になります.技术はこのようにして、分かる人は本当に简単だと感じて、知らない人は本当に难しいです...
一般的にサードパーティインタフェースとデータをドッキングする場合、多くのRSA署名を使用することを保証するために、性的に理解していない学生は原理を知っている学生だけで、主は「RSA非対称加/復号アルゴリズムの中で最も流行している最も牛が追い詰められて、それをどのように使うかを知っていれば十分だ」という重点内容を知っていなければならない.RSA暗号化アルゴリズムの原理について興味のある学生は「チェン一峰」のブログを検索することができます.
RSA暗号化アルゴリズムの原理1 RSA暗号化アルゴリズムの原理2
private static function sign($data){         $pk = self::$private_key;         openssl_sign($data, $sign, $pk);         $sign = base64_encode($sign);         return $sign; }どう見て$signはどこから来たの???微臣は知らないで、普通のphp関数と少し异なって、颜を覆います....
構文は次のとおりです:openssl_Sign(「署名するデータ」、「署名後に返されるデータ」、「署名の鍵/公開鍵署名であっても秘密鍵署名であってもよく、一般的には秘密鍵暗号化、公開鍵復号化」)
関数解析:sign()関数のopenssl_sign(data,data,sign,pk);pk);Dataデータが転送されましたopenssl_Sign()はdataに署名し、静的変数dataに署名し、静的変数private_を使用します.key、署名が完了したら$signを署名結果として返し、base 64_encode()はバイナリ符号化を行い、符号化された署名を返す
$private_key = '-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEA346nvWRmWhmdpHSsai6aUfDg9SehCUsDmBNji8OXmiQJmkBO ssN/cu3Ifap7P6sgENzZbh/SYB/+i3JeBGlQetFt+kjJQnr1lDUQlSWBBq6OyxGT LYDw3NyFsV1BN/NdQ06HzT1k/J0AZChyLMpMR8HUWZE6stbnocdY9aDXXAILyRa6 tJ6WUwepfMUFZfQAxWkpNLVXzY+QTf95ACblqVRoqRbVNNL4AOT1FYmQyIrD9gUI wMQaUJ+2fGJtT9m1rbLpj87BddKKw5T7TOwqwDJrEgrHQ5m3YmphAEIrM6ZreV2C FlT4RI8kvFfivqo/TvuTO4rMITzCwvxK6+dzuwIDAQABAoIBAQCRaFVcT6hvJEgw Bp96dRN1BqsbagpJZBxTVxEhgDfkT1pblUZa6ePE2jrU2gVOVT0HGs7l3RbV5RmI k/vo/KMXL49MAvm9HwMKwjUl/X3d3b4NAUJsj3ia/2iKA7D+9nEL7VFRQoSj9m6h ttkEnxRcfAtlspuuZS/GP0ZyhYpuUcMoyCXEGknvp+xCrbWPSwjZR4qrd/c5XP2H aRn+3ZaKiZOnVR765zN+DOOBvD+AuHT0bHxg9dceir5U+cTWNQ9mopR4+lsjcxIF BjzOFsx6nxz53Si0Lz+nKVtnUKRRTYbiXnVra3MuSVheu1MYLXDY/fGQIv0o1U8G 2s2if7NRAoGBAPBhczAwi5slugweFBvn5QC/tumvn49+A9r4eugcglDrXPbBhbcT gzGwTogS8rT8BosowY6d4QI7sajdRtG0+Lga/plILIjif8ksJPGTnkRVFmilJN25 QSmdcU8iX60AJCpz4t6wk2rLeFfyXh+Pdi7j6/ipn9XgoW+cbODSIm7TAoGBAO4V XEmcsNHVuX/g/QaBYEjo/kXqbnZ28/1sNAEwFZ8mI4NEah8e80lLiNyjXcGN/6UC 2UgTukkghwpKRDBNqmuOHb85Ps3Kl2WwAs2vHwdyUxbO9+z0nXBVZrE7nRUoatxy T2fEzqWu3zVVbVdHcE5VSr5SHHbTtGYiH4P3A2Z5AoGAUBHF0rl45zcL39ltDVaT G0rA3NpZJeztz9SQ7BwC9H1RvAf+SFtBih2WKxFUsyB39Yaf4qeIObw0k3ERk+za JEkpoVk/LGF1+0avD6ECSPSmwDiyLQD2Saxd/+QNRo0TfuiXG2Jp2FrqPTFIVO7u iPP2uB+YVB+85naOddzJB20CgYEAodpBoAV2q1/5OHcybB693zMN0Wf66mwZmLnb bMdMm6Ho2I9E+Z0n1TcVdrFUxoWLOpmCLx7CMH59b0BntNLHvVCi5mG7UVmdrNKI RV384SoWVFYlc6Aj+78DDg+xzTVp2C2Zz7iap0YHlhFaQNBfB9Gx+0qE8T8gz6H4/NSLKjkCgYBHjrlArjQufEwC2Evz+aMpB6Ie//P7OKXVTHQZUkv5bWKCBgYbukb1 ErpDGUZqjRY0uJ3NUspcdIAYFu7vqHk7/epT1Ev6qGb6v9tkM7iudtS7LBtsfSjx Z8G0msgfQDur9pyEVb9L3Im5K5TrzUiDZt0s1eok6WrwpiLOjNMoEw== -----END RSA PRIVATE KEY-----';  
$public_key = '-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA346nvWRmWhmdpHSsai6a UfDg9SehCUsDmBNji8OXmiQJmkBOssN/cu3Ifap7P6sgENzZbh/SYB/+i3JeBGlQ etFt+kjJQnr1lDUQlSWBBq6OyxGTLYDw3NyFsV1BN/NdQ06HzT1k/J0AZChyLMpM R8HUWZE6stbnocdY9aDXXAILyRa6tJ6WUwepfMUFZfQAxWkpNLVXzY+QTf95ACbl qVRoqRbVNNL4AOT1FYmQyIrD9gUIwMQaUJ+2fGJtT9m1rbLpj87BddKKw5T7TOwq wDJrEgrHQ5m3YmphAEIrM6ZreV2CFlT4RI8kvFfivqo/TvuTO4rMITzCwvxK6+dz uwIDAQAB -----END PUBLIC KEY-----';
//echo $private_key;   $pi_key =  openssl_pkey_get_private($private_key);//この関数は、秘密鍵が利用可能であるか否かを判断し、リソースid Resource id$puを返すために使用することができる.key = openssl_pkey_get_public($public_key);//この関数は、公開鍵が利用可能なecho$pi_であるか否かを判断するために使用することができる.key;echo "";   echo $pu_key;echo "";  
$data=「忙しいでしょう、レモンを食べます!」//元のデータ$encrypted="";$decrypted = ""; echo"---------------------------------------","秘密鍵暗号化,公開鍵で復号:","---------------------------------------";  echo "source data:",$data,"";   echo ""; echo「暗号化内容:」;  openssl_private_encrypt($data,$encrypted,$pi_key);//秘密鍵暗号化$encrypted=base 64_encode($encrypted);//暗号化されたコンテンツには通常特殊な文字が含まれており、符号化変換が必要であり、ネットワーク間でurlを介して伝送される場合、base 64符号化がurlの安全なecho$encryptedであるかどうかに注意しなければならない.  echo "";
echo「復号開始:」;  openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//秘密鍵で暗号化されたコンテンツは、公開鍵で復号され、echo$decrypted,"; 
echo"---------------------------------------","公開鍵暗号化,秘密鍵で復号:","---------------------------------------"."";   openssl_public_encrypt($data,$encrypted,$pu_key);//公開鍵暗号化$encrypted=base 64_encode($encrypted); echo'暗号化内容:',$encrypted;  echo ""; echo「復号内容:」;  openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//秘密鍵復号echo$decrypted,";画像のような出力を見たら大丈夫です.公開鍵と秘密鍵がペアであることを示しています.
鍵生成(win下):openssl鍵生成ツールダウンロードファイルをクリックして解凍します.ここでD:opensslディレクトリの下に置いてcmdコンソールを開きます.cmdが黒いウィンドウに入ります.ハハハ...コマンドを実行します.下のコマンドd:cd openssl/bin
氏は秘密鍵を作成し、パラメータ1024/2048はrsaを選択することができる.private_key.pemこれは生成されたファイル名で、カスタマイズできます.中国語で実行しないことをお勧めします:openssl genrsa-out rsa_private_key.pem  2048 
#秘密鍵に基づいて公開鍵ファイルを生成して実行する:openssl rsa-in rsa_private_key.pem -pubout -out rsa_public_key.pemはスプーンを横にしました
コンパイラは、定義変数を開くことを推奨せずに開くことができます.
$PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY----- ************************ ************************ ************************ -----END RSA PRIVATE KEY-----';
お知らせ:スタートと終了のラベルは残しておきますよ、捨てないでね!!! 

原文:https://blog.csdn.net/qq_27517377/article/details/79047021             https://www.cnblogs.com/kennyhr/p/3746100.html