将Google验证签名代码(kotlin)转换为PHP(laravel)

我需要验证签名,这是Google开发人员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

编辑

kotlins Base64.decode(encodedPublicKey,Base64.DEFAULT)返回一个字节数组。我设法在php中使用unpack()来获得相同的结果:

$decodedKey = unpack('c*',$decodedKey); // ByteArray
gaoyuanzhiyun 回答:将Google验证签名代码(kotlin)转换为PHP(laravel)

所以最后我使用了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个字符。

本文链接:https://www.f2er.com/2752472.html

大家都在问