从Ruby向Android发送公钥

从Ruby向Android发送公钥,android,ruby,openssl,public-key-encryption,Android,Ruby,Openssl,Public Key Encryption,在服务器上 OpenSSL::PKey::RSA.generate(1024).public_key.to_s 返回 "-----BEGIN RSA PUBLIC KEY-----\nMIGJAoGBAPHpKZe0jKkyyslkhnoQzRovzQB+6OLtACNkILk+6UKgYJ1UM7Qkpxab\noEHnpR/XHrIfFUB8dfhaIeqHGC3IASZh6vveH6ypwZTqDHrejqYcfOuKOJcCRDJf\n/qxeVy1jwt7oMbrDhCeVNd3eI

在服务器上

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

但这是无效的。有什么好处?

这真是个好主意:)好的,让我们从头开始

  • 我检查了Base64是否可以解码字符串的内容,但出现了问题->是
  • 我检查了解码的字节数组是否是有效的DER编码->是
  • 我检查了DER编码是否表示RSA公钥->是
  • 我检查了是否可以将原始字符串直接解析为RSA公钥->否
WTF?!然后,我将RSA公钥重新编码到PEM中,它给了我:

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

看到区别了吗?这是PEM标题。Base64编码的结构是公钥的通用X.509表示形式(因此也是头中的差异),而不是PKCS#1中描述的RSA特定表示形式,这意味着头!如果您更改PEM标题,那么它将工作

在我看来这是有效的。正在将\n扩展为换行符