从 Ruby 向 Android 发送公钥

发布于 2024-12-01 09:40:59 字数 799 浏览 1 评论 0原文

服务器

OpenSSL::PKey::RSA.generate(1024).public_key.to_s

会返回

"-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAPHpKZe0jKkyyslkhnoQzRovzQB+6OLtACNkILk+6UKgYJ1UM7Qkpxab\noEHnpR/XHrIfFUB8dfhaIeqHGC3IASZh6vveH6ypwZTqDHrejqYcfOuKOJcCRDJf\n/qxeVy1jwt7oMbrDhCeVNd3eIYdq0joEnZ6k4KwqvG1ZIOKkE8adAgMBAAE=\n-----END RSA PUBLIC KEY-----\n"

当我将此字符串复制并粘贴为 java 字符串时, 该字符串。但是,我需要通过 httpResponse 获取此公钥。当被 HttpRequest 调用时,它返回:

-----BEGIN RSA PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCySmMxjxX1Xw80yRB35BQHP27V
EhIUG9/bxsyJMs4rhmvnpP7saeBznyDMQ3I5wt7cJEPABy+QuuAGjphj6/FsfsXP
9zLRroX02f48fQXNM7j8RtQ5y8bhcZrnb8/MNoAKnbAqkKlkuW/gRxSB0qeG5Q17
vvSJ6KHb5heAFwaGtwIDAQAB
-----END RSA PUBLIC KEY-----

但这是无效的。什么给?

On the server

OpenSSL::PKey::RSA.generate(1024).public_key.to_s

returns

"-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAPHpKZe0jKkyyslkhnoQzRovzQB+6OLtACNkILk+6UKgYJ1UM7Qkpxab\noEHnpR/XHrIfFUB8dfhaIeqHGC3IASZh6vveH6ypwZTqDHrejqYcfOuKOJcCRDJf\n/qxeVy1jwt7oMbrDhCeVNd3eIYdq0joEnZ6k4KwqvG1ZIOKkE8adAgMBAAE=\n-----END RSA PUBLIC KEY-----\n"

which works when I copy and paste this string as a java String. However, I need to get this public key through a httpResponse. When called by an HttpRequest, it returns:

-----BEGIN RSA PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCySmMxjxX1Xw80yRB35BQHP27V
EhIUG9/bxsyJMs4rhmvnpP7saeBznyDMQ3I5wt7cJEPABy+QuuAGjphj6/FsfsXP
9zLRroX02f48fQXNM7j8RtQ5y8bhcZrnb8/MNoAKnbAqkKlkuW/gRxSB0qeG5Q17
vvSJ6KHb5heAFwaGtwIDAQAB
-----END RSA PUBLIC KEY-----

But this is invalid. What gives?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

笔芯 2024-12-08 09:40:59

这确实是一个不错的:) 好吧,让我们从头开始。

  • 我检查了是否可以对有问题的字符串内容进行 Base64 解码 ->是的,
  • 我检查了解码的字节数组是否是有效的 DER 编码 ->是的,
  • 我检查了 DER 编码是否代表 RSA 公钥 ->是的,
  • 我检查了是否可以直接将原始字符串解析为 RSA 公钥 ->没有

WTF?!然后我重新编码了能够解码为 PEM 的 RSA 公钥 - 它给了我:

-----BEGIN PUBLIC KEY-----
... same Base64 as in your string ...
-----END PUBLIC KEY-----

看到区别 - 这是 PEM 标头。 Base64 编码的结构是公钥的通用 X.509 表示形式(因此标头也有所不同),而不是 PKCS#1 中描述的 RSA 特定表示形式,您的标头将暗示这一点!如果您更改 PEM 标头,那么它就会起作用!

This is really a nice one :) OK, let's start from the beginning.

  • I checked whether I can Base64-decode the contents of the string with problems -> yes
  • I checked whether the decoded byte array is a valid DER encoding -> yes
  • I checked whether the DER encoding represents an RSA public key -> yes
  • I checked whether I could parse the original string as an RSA public key directly -> no

WTF?! Then I reencoded the RSA public key I was able to decode to PEM - and it gave me:

-----BEGIN PUBLIC KEY-----
... same Base64 as in your string ...
-----END PUBLIC KEY-----

See the difference - it's the PEM headers. The structure that is Base64-encoded is the generic X.509 representation of a public key (therefore also the difference in the headers), and not the RSA-specific representation described in PKCS#1, which your headers would imply! If you change the PEM headers, then it'll work!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文