我需要驗證簽名,這是谷歌開發人員Android api中的安全功能。他們有一個用kotlin編寫的工作示例。自動取款機。我正在嘗試轉換此代碼:val decodedKey = Base64.decode(encodedPublicKey, Base64.DEFAULT)val keyFactory = KeyFactory.getInstance("RSA")return keyFactory.generatePublic(X509EncodedKeySpec(decodedKey))已修復。我從谷歌得到它。encodedPublicKey我已安裝,目前我嘗試轉換上述代碼:phpseclib$decodedKey = base64_decode($encodedPublicKey);$x509 = new X509();$x509->loadX509($encodedPublicKey);$rsa = $x509->getPublicKey();return [$rsa, $x509];我發現這甚至不起作用。它不返回任何內容,而 kotlin 代碼返回許多解碼的密鑰,例如:base64_decode($encodedPublicKey)Base64.decode(encodedPublicKey, Base64.DEFAULT)D/IABUtil/Security: decodedKey 0 :48編輯kotlins 返回一個字節數組。我設法通過在php中使用來獲得相同的結果:Base64.decode(encodedPublicKey, Base64.DEFAULT)unpack()$decodedKey = unpack('c*', $decodedKey); // ByteArray
1 回答

aluckdog
TA貢獻1847條經驗 獲得超7個贊
所以最后我用了開放的ssl。
$publicKey = env('BASE_64_ENCODED_PUBLIC_KEY');
$key = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($publicKey, 64, "\n") . "-----END PUBLIC KEY-----";
$key = openssl_get_publickey($key);
if (false === $key) {
return ["Could not get public Key"];
}
$verify = openssl_verify($originalJson, base64_decode($signature), $key, "sha1WithRSAEncryption");
將公鑰轉換為正確的格式非常重要。每行必須有 64 個字符。
- 1 回答
- 0 關注
- 158 瀏覽
添加回答
舉報
0/150
提交
取消