Java 生成的 RSA 公鑰在 PHP 無法正確解析問題解決記錄

Hollie發表於2022-11-25

Java 生成的公鑰 PHP 解析錯誤解決方案:

在對接一個註冊小程式,需要對引數進行驗籤,但是對方使用的是Java,記錄下在對接過程遇到的坑以及解決方案

$publicKey = "MIIBIjANBgkqhkiG9w0BAQExxxxxxxxxxxxxxxxxKCAQEAoKFfxC1TNpWlwvdwABbC0OmGouaDOXP9vKkUga4hDT8QdNOoaaiDkAvMtym-M_ro0X7TvwakDh2exELjFhnjvgd1aQ0ePdB6RSRWspDiL5BF0ACyKaRtGI034QgFmWfwpfKdDIwy0mGZqMF3Qwkge7Zj_IP7yXr3vzgwUqO7ex2hU1vXtRC5JNAiFhWqQeIbTyMKvYgg3eNIWTd0ZyW4tXfKR9fSesIxSYGP6xAuvbCy3R0qp0Nwq1XQaDQSoMB3IqhjU6FGbrjEG8J3Yxowat8B2VGIsJUj8xTr5tlBqT0QJs2vcC2ZfZzr_yexyKk_KJYMVSiSRSoLe8rtC7X2aQIDAQAB"; // 對方提供的公鑰
openssl_get_publickey($publicKey) // 返回了 false

第一個問題:

需要對公鑰進行處理直接上程式碼,就是這個坑卡了我好久

// 包括 java 透過 RSA 加密後給你的引數都需要進行替換
$publicKey = str_replace('_', '/', str_replace('-', '+', $publicKey));
// 不然就會一直 false
openssl_get_publickey($publicKey);

第二個問題:

由於Java生成的公鑰預設不攜帶

-----BEGIN PUBLIC KEY----------END PUBLIC KEY-----

php是需要攜帶的所以就要拼接成下面這種格式

-----BEGIN PUBLIC KEY-----
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
********
-----END PUBLIC KEY-----

每64個字元為一行,注意換行問題,接下來就可以正常驗簽了
希望可以幫助你們!

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Web 開發者,Laravel 腦殘粉,喜歡挑戰探索新的東西,更喜歡完成一件有意義的事情之後的成就感!

相關文章