gpt4 book ai didi

java - 安卓 KeyPairGenerator + php openssl_public_encrypt

转载 作者:行者123 更新时间:2023-11-30 03:45:46 26 4
gpt4 key购买 nike

我有一个生成公钥+私钥对的客户端(安卓设备)。它将公钥发送到服务器,服务器应使用公钥加密一些数据并将其返回,以便客户端稍后可以使用私钥对其进行解密。我的 PHP 代码记录了一条警告,指出我提供的公钥无效。

在设备端,我生成 key 对如下-

KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(256);
KeyPair kp = kpg.generateKeyPair();
PublicKey publicKey = kp.getPublic();

然后我进行 base64 编码并发布 -

String urlParameters = "productID=" + productID + "&publicKey="
+ URLEncoder.encode(Base64.encodeToString(publicKey.getEncoded(),
Base64.DEFAULT)); // without the URLEncoder, the + signs
// are turned into spaces

在服务器端,我从 POST 参数中提取 publicKey 并尝试使用它来编码一些数据 -

$publicKey = $_POST['publicKey'];
$encryptedData = '';
$productData = 'test test test';
openssl_public_encrypt($productData, $encryptedData, $publicKey);

这最终会在日志中出现以下错误 -

PHP Warning:  openssl_public_encrypt(): key parameter is not a valid public key

我也曾尝试在使用公钥进行加密之前将前缀和后缀添加到公钥中,但这也无济于事 -

$publicKey = "-----BEGIN PUBLIC KEY-----\r\n" . $publicKey . "\r\n-----END PUBLIC KEY-----";

我为此伤脑筋了一段时间,但我在网上看到的所有建议似乎都没有帮助。任何想法都会很有帮助!

最佳答案

通过进行 2 处更改最终设法解决了问题 -

  1. 必须在 Java 端使用 Base64.NO_WRAP 标志而不是 Base64.DEFAULT
  2. 在分块后在 php 中添加了前缀/后缀 - $publicKey = "-----BEGIN PUBLIC KEY-----\r\n"。 block 拆分($publicKey)。 "-----结束公钥-----";

关于java - 安卓 KeyPairGenerator + php openssl_public_encrypt,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15041389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com