当前位置: 首页 > 知识库问答 >
问题:

如何在两种类型的公钥格式之间转换,一种是“Begin RSA公钥”,另一种是“Begin公钥”

陈昊昊
2023-03-14

我如何在两种风格的公钥格式之间转换,一种格式是:

-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----

另一种格式是:

-----BEGIN RSA PUBLIC KEY-----
...
-----END RSA PUBLIC KEY-----

例如,我使用ssh-keygen命令生成id_rsa/id_rsa.pub对,我使用以下命令从id_rsa计算公钥:

openssl rsa -in id_rsa -pubout -out pub2 
ssh-keygen -f id_rsa.pub -e -m pem > pub1
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEA61BjmfXGEvWmegnBGSuS+rU9soUg2FnODva32D1AqhwdziwHINFa
D1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBSEVCgJjtHAGZIm5GL/KA86KDp/CwDFMSw
luowcXwDwoyinmeOY9eKyh6aY72xJh7noLBBq1N0bWi1e2i+83txOCg4yV2oVXhB
o8pYEJ8LT3el6Smxol3C1oFMVdwPgc0vTl25XucMcG/ALE/KNY6pqC2AQ6R2ERlV
gPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeulmCpGSynXNcpZ/06+vofGi/2MlpQZNhH
Ao8eayMp6FcvNucIpUndo1X8dKMv3Y26ZQIDAQAB
-----END RSA PUBLIC KEY-----

pub2的内容为:

-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA61BjmfXGEvWmegnBGSuS
+rU9soUg2FnODva32D1AqhwdziwHINFaD1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBS
EVCgJjtHAGZIm5GL/KA86KDp/CwDFMSwluowcXwDwoyinmeOY9eKyh6aY72xJh7n
oLBBq1N0bWi1e2i+83txOCg4yV2oVXhBo8pYEJ8LT3el6Smxol3C1oFMVdwPgc0v
Tl25XucMcG/ALE/KNY6pqC2AQ6R2ERlVgPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeu
lmCpGSynXNcpZ/06+vofGi/2MlpQZNhHAo8eayMp6FcvNucIpUndo1X8dKMv3Y26
ZQIDAQAB
-----END PUBLIC KEY-----

根据我的理解,pub1和pub2包含相同的公钥信息,但是它们是不同的格式,我想知道如何在两种格式之间进行转换?谁能给我一些关于这两种格式的简明介绍吗?

共有1个答案

越飞鸾
2023-03-14

使用纯PHP RSA实现phpseclib...

<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
$rsa->loadKey('-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA61BjmfXGEvWmegnBGSuS
+rU9soUg2FnODva32D1AqhwdziwHINFaD1MVlcrYG6XRKfkcxnaXGfFDWHLEvNBS
EVCgJjtHAGZIm5GL/KA86KDp/CwDFMSwluowcXwDwoyinmeOY9eKyh6aY72xJh7n
oLBBq1N0bWi1e2i+83txOCg4yV2oVXhBo8pYEJ8LT3el6Smxol3C1oFMVdwPgc0v
Tl25XucMcG/ALE/KNY6pqC2AQ6R2ERlVgPiUWOPatVkt7+Bs3h5Ramxh7XjBOXeu
lmCpGSynXNcpZ/06+vofGi/2MlpQZNhHAo8eayMp6FcvNucIpUndo1X8dKMv3Y26
ZQIDAQAB
-----END PUBLIC KEY-----');
$rsa->setPublicKey();

echo $rsa->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_PKCS1_RAW);

base64编码的东西看起来是匹配的,即使头上说的是BEGIN公钥而不是BEGIN RSA公钥。所以也许只需要使用str_replace来修复它,您就可以很好地进行了!

 类似资料:
  • 如何在两种公钥格式之间进行转换,一种格式是: 另一种格式是: 例如,我使用ssh-keygen命令生成id_rsa/id_rsa.pub对,我使用id_rsa计算公钥: 然后我再次从id_rsa计算公钥。发布使用: 内容是pub1是: 而pub2的内容是: 根据我的理解,pub1和pub2包含相同的公钥信息,但是它们的格式不同,我想知道如何在两种格式之间转换?有人能给我看一些关于两种格式的简明介绍

  • 问题内容: 我有以下格式的公钥 我需要将其转换为以下格式 基本上,问题是我正在使用用Java编写的第三方库。 第三方库使用Java类“ RSAPublicKeySpec”从字符串生成RSAPublicKey类型的实例。 我提供给该第三方库的字符串取自以下格式的文件: 仔细研究一下代码之后,我可以看到,如果我使用java类“ X509EncodedKeySpec”来加载此公共密钥,则代码的签名验证部

  • 我试图生成私钥和公钥对。我想使用私钥签署我的JWT,并将公钥发送给第三方来解码我的JWT。 在mac os终端上,我生成了如下密钥: ssh-keygen-m PEM-t rsa-b 2048 现在我有了pkey吗 rsa_private=OpenSSL::PKey::rsa。新建(File.read(“/path/to/private/key/pkey”)) 你是私人的。要\u s “----开

  • 我有以下公钥(作为示例): 我需要能够将其转换为可以插入ssh known_hosts文件的格式。例如: 谢了!

  • 我的公共在ssh-rsa是: ssh rsa aaaab3nzac1yc2aaaaaadaqabaababaqclaxt5s/wux04oxbt9r59wcl45omau3m0063lfyja7ovqavr7/2kHtLF/LoCQCXSZMny8RTCGDjoXD7G/tGsyHFDHCI//Y1VDLE06AlDzrlu69DQY91 6gkhghgjh3sf6us5hxlihrbsflf8g

  • 我试图从已经生成的密钥对(两个s)中提取1024位RSA公钥,以便通过网络发送。我只需要一个普通的对,它应该正好占用131字节(模128字节,指数3字节)。 但是,当我以对象的形式获取密钥信息时,我得到的是140位,而不是131位。下面是一个示例结果: 在多次重试密钥生成并比较生成的对象后,所有密钥保持不变的字节是前7个: 最后三个字节看起来像指数(65537,一个公共值)。模数和指数之间还有两个