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 協議》,轉載必須註明作者和本文連結