簡體   English   中英

將 google 驗證簽名代碼 (kotlin) 轉換為 PHP (laravel)

[英]Convert google verify signature code (kotlin) to PHP (laravel)

我需要驗證一個簽名,這是谷歌開發者 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];

我發現甚至base64_decode($encodedPublicKey) 它什么都不返回,而 kotlin 代碼Base64.decode(encodedPublicKey, Base64.DEFAULT)返回許多已解碼的密鑰,例如:

D/IABUtil/Security: decodedKey 0 :48

編輯

kotlins Base64.decode(encodedPublicKey, Base64.DEFAULT)返回一個Base64.decode(encodedPublicKey, Base64.DEFAULT) 我通過在 php 中使用unpack()獲得了相同的結果:

$decodedKey = unpack('c*', $decodedKey); // ByteArray

所以最后我為此使用了 open 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");

信用: android in app billing v3 with php

將公鑰轉換為正確的格式很重要。 每行必須有 64 個字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM