我需要验证签名,这是谷歌开发人员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 关注
- 120 浏览
添加回答
举报
0/150
提交
取消