Преобразовать код подтверждения подписи Google (kotlin) в PHP (laravel) - PullRequest
0 голосов
/ 17 января 2020

Мне нужно проверить подпись, которая является функцией безопасности в Google Developer android API. У них есть рабочий пример, который написан на kotlin.

Атм. Я пытаюсь преобразовать этот код:

val decodedKey = Base64.decode(encodedPublicKey, Base64.DEFAULT)
val keyFactory = KeyFactory.getInstance("RSA")
return keyFactory.generatePublic(X509EncodedKeySpec(decodedKey))

Исправлено encodedPublicKey. Я получаю его от Google.

Я установил 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

EDIT

kotlins Base64.decode(encodedPublicKey, Base64.DEFAULT) возвращает байтовый массив. Мне удалось получить тот же результат, используя unpack() в php:

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

1 Ответ

0 голосов
/ 21 января 2020

Итак, в конце я использовал для этого открытый 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 в биллинге приложения v3 с php

Это было важно преобразовать ключ publi c в правильный формат. В каждой строке должно быть 64 символа.

...