【问题标题】:Sending public key to Android from Ruby从 Ruby 向 Android 发送公钥
【发布时间】:2011-08-23 00:28:41
【问题描述】:

在服务器上

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-----

但这是无效的。什么给了?

【问题讨论】:

  • 它对我来说似乎有效。 \n 正在扩展到换行符

标签: android ruby openssl public-key-encryption


【解决方案1】:

这真的很不错:) 好的,让我们从头开始。

  • 我检查了是否可以对有问题的字符串内容进行 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 标头,那么它将起作用!

【讨论】:

    猜你喜欢
    • 2014-08-03
    • 1970-01-01
    • 2015-06-17
    • 2021-09-24
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2018-06-30
    相关资源
    最近更新 更多