为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
千巷猫影 2022-08-05 16:12:54
我需要验证签名,这是谷歌开发人员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 个字符。


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信