Java PKCS8秘密鍵署名PHP実装

Javaは次のように実装されます

サーバーは Java バージョンのサンプルのみを提供するため、PHP が独自に実行する必要があります。

暗号化と復号化のプロセス全体を通じて、rsa は公開キー暗号化、秘密キー復号化、および秘密キー署名公開キー検証を実行します。

http://www.metools.info/code/c82.html  (オンライン RAS 暗号化および復号化)

1./** * 公開鍵暗号化と秘密鍵復号化*/
$rsaPublicKey、$rsaPrivateKey は両方とも pem 形式の公開鍵ファイルと秘密鍵ファイルで、先頭が pkcs8 で始まり、上記の形式で終わります $data = '公開鍵暗号化コンテンツ'; //公開鍵暗号化 $rsaPublicKey = openssl_get_privatekey($rsaPublicKey); openssl_public_encrypt($data, $encrypted, $rsaPub licKey); //秘密鍵の復号化 $rsaPrivateKey = openssl_get_privatekey($rsaPrivateKey); openssl_private_decrypt(base64_decode($encodeData), $decrypted, $rsaPrivateKey
)
;

2./** * 秘密鍵署名公開鍵検証 */

/** 
45 * 私钥签名公钥验签
46 */ 
47 $priStr = '私钥签名内容'; 
48 //私钥签名
49 $signature = ""; 
50 openssl_sign($priStr, $signature, $privKey, OPENSSL_ALGO_SHA256); 
51 $signature = Base64_encode($signature); 
52 // var_dump($signature); 
53 //公钥验签
54 /**如果签名正确は1を返し、签名错误は0を返し、内部発生错误は-1を返します。*/ 
55 $result = (bool)openssl_verify($priStr, Base64_decode($signature), $pubKey,OPENSSL_ALGO_SHA256); 
56 var_dump($result);

Javaで与えられる秘密鍵の例は次のとおりです

"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwgg JcAgEAAoGBAKkumt1vUdbsk2KOQCTJH+HSHtZHK7PNTazAfbhS2v+bDbDSyqb192P yS9M7lLvL4RtXAs9E1Mi5tbFy0mw8gyWypHbeWX/Vj1k1 HSyHpXHwNWgak2l+U6iI H9OuRfqkZ2BGLfgGeQj2Zm+dGCuCLcAKW+rkftCPpo26zcfzVDXJAgMBAAECgYEAm 2uTHYXcmyMuqsWfq6uQvHW5moQ7Y6xhhSg41pJXWaXpx91+Ci/AG3NFsUH0+y jrHa CrlhnXmKbygZfIM2LL3t/OSOGNP8x9OoVMlZwvqJZSDWaUBR0axFxC/lnM4QlmlQx 8Dbh3TCzrHJHzH72b1Q7xeO+HqMTKcIN4wxciC2ECQQDkw7DQI/pbia3GzQf+GCLw 7taMD8NRFKkNNVbjb 9cCy7VzKNBi3sDH014TDJiemYUMtptzgd+70+KQooxVhRYVA kEAvVL0rQXzt4UKUVw7UzsNpJoSZnH6lYHeRo8KNnWn/QvRYtIEwutH9+m1+H+Lxs KkpsG5IGIhUxlkV7hZHiPh5QJAdTmuLkpx bVzU1s2T7eoSZaIOAQHG1ZKfuiv+FVf nNwCKP7PHbRK2eO9gAqTuxD7pBgXBDOSdcJN4QyN4hA5JrQJAJ2r3MHMVzDbx8ACh BXI9I/FENXozrx8r9Urg2HfkswXb4ZRSk3bDNDW/wm5j3s0 11NZuwfRMde3Ke40RW 投票QJANlvVkq5GH9VFKSjr6idK7H4QustZZpMIs3LuCO4beS3qBidbSX9AtqrJ1v2qKvT8YeuTjlzb1DAAll9Zflew8hw==

Java は、pkcs8 を使用して公開鍵と秘密鍵を入力します。つまり、pem ファイルは -----BEGIN PRIVATE KEY----- で始まり、-----END PRIVATE KEY----- で終わります。

MD5Withrsa を使用する Java によって実装された図を見てください。つまり、 

OPENSSL_ALGO_MD5

署名アルゴリズムとして

最終的な秘密鍵は、

-----秘密鍵の開始-----
MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwgg JcAgEAAoGBAKkumt1vUdbsk2KOQCTJH+HSHtZHK7PNTazAfbhS2v+bDbDSyqb192P yS9M7lLvL4RtXAs9E1Mi5tbFy0mw8gyWypHbeWX/Vj1k1HS yHpXHwNWgak2l+U6iI H9OuRfqkZ2BGLfgGeQj2Zm+dGCuCLcAKW+rkftCPpo26zcfzVDXJAgMBAAECgYEAm 2uTHYXcmyMuqsWfq6uQvHW5moQ7Y6xhhSg41pJXWaXpx91+Ci/AG3NFsUH0+yjrハ CrlhnXmKbygZfIM2LL3t/OSOGNP8x9OoVMlZwvqJZSDWaUBR0axFxC/lnM4QlmlQx 8Dbh3TCzrHJHzH72b1Q7xeO+HqMTKcIN4wxciC2ECQQDkw7DQI/pbia3GzQf+GCLw 7taMD8NRFKkNNVbjb9 cCy7VzKNBi3sDH014TDJiemYUMtptzgd+70+KQooxVhRYVA kEAvVL0rQXzt4UKUVw7UzsNpJoSZnH6lYHeRo8KNnWn/QvRYtIEwutH9+m1+H+Lxs KkpsG5IGIhUxlkV7hZHiPh5QJAdTmuLkpxb VzU1s2T7eoSZaIOAQHG1ZKfuiv+FVf nNwCKP7PHbRK2eO9gAqTuxD7pBgXBDOSdcJN4QyN4hA5JrQJAJ2r3MHMVzDbx8ACh BXI9I/FENXozrx8r9Urg2HfkswXb4ZRSk3bDNDW/wm5j3s01 1NZuwfRMde3Ke40RW PollQJANlvVkq5GH9VFKSjr6idK7H4QustZZpMIs3LuCO4beS3qBidbSX9AtqrJ1v2qKvT8YeuTjlzb1DAAll9Zflew8hw==
-----秘密キーの終了-----

 

暗号化されたコンテンツは、

POST
content-type=application/json
x-ca-key=APP32237482313
x-ca-nonce=123456
x-ca-timestamp=1600484246123
/sample?body={"avatar":"https://sample.com/sample.jpg","nickname":"UA","password":"123456","thirdPartI d":"10000","ユーザー名":"UA"}

 

暗号化された結果は、

amPImZ0upTEyo+5Y5lKRgU/6Nknnyv3IlaLz+UNNG5xN0dxfpb+SpaGunwpy9D67Mj3oqmZrvqF5nwHWD8d6IEMl0dr5AuLJKhMYQ/h0d7j/4xjoOIFrscWRK669aq4zNeC2Hg+nGgdY2 yNaEEpx N+qWdb7QwIIbIZ0hjM6XEng=

 

pkcs8 の Java 秘密キーを php がサポートする秘密キーに変換できます (Alipay 開発アシスタントを使用して変換することもできます)

openssl rsa -in pkcs8.pem -out pkcs1.pem

変換後の秘密鍵は次のようになります。

-----RSA 秘密鍵の開始-----
MIICXAIBAAKBgQCpLprdb1HW7JNijkAkyR/h0h7WRyuzzU2swH24Utr/mw2w0sqm9fdj8kvTO5S7y+EbVwLPRNTIubWxctJsPIMlsqR23ll/1Y9ZNR0sh6Vx8DVoGpNpflOoiB/TrkX6pGdgRi34BnkI9 mZvnRgrgi3AClvq5H7Qj6aNus3H81Q1yQIDAQABAoGBAJtrkx2F3JsjLqrFn6urkLx1uZqEO2OsYYUoONaSV1ml6cfdfgovwBtzRbFB9Pso6x2gq5YZ15im8oGXyDNiy97fzkjhjT/MfTqFTJWcL6 iWUg1mlAUdGsRcQv5ZzOEJZpUMfA24d0ws6xyR8x+9m9UO8Xjvh6jEynCDeMMXIgthAkEA5MOw0CP6W4mtxs0H/hgi8O7WjA/DURSpDTVW42/XAsu1cyjQYt7Ax9NeEwyYnpmFDLabc4Hfu9PikK KMVYUWFQJBAL1S9K0F87eFClFcO1M7DaSaEmZx+pWB3kaPCjZ1p/0L0WLSBMLrR/fptfh/i8bCpKbBuSBiIVMZZFe4WR4j4eUCQHU5ri5KcW1c1NbNk+3qEmWiDgEBxtWSn7or/hVX5zcAij+ zx20StnjvYAKk7sQ+6QYFwQzknXCTeEMjeIQOSa0CQCdq9zBzFcw28fAAoQVyPSPxRDV6M68fK/VK4Nh35LMF2+GUUpN2wzQ1v8JuY97NNdTWbsH0THXtynuNEVj6JZUCQDZb1ZKuRh/VRSko6+ onSux+ELrLWWaTCLNy7gjuG3kt6gYnW0l/QLaqydb9qir0/GHrk45c29QwJZfWX5XsPIc=
-----RSA 秘密鍵の終了-----

 

これまでのところ、 /** * 秘密鍵署名公開鍵検証 */ を使用しています。

 

 

 

 

おすすめ

転載: blog.csdn.net/qiuziqiqi/article/details/117329321