1

我的搭档给了我一个 RSA 公钥,如下所示:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCSK+roLfbUYf6PGNIf6Ej8R5EqSTjlRABTu7T0FxR/B6iurI80jktW9+zKu4jFnFJ8oYx24raD3x5KhJZR2VCBEEbtYpPq/5E25v+LIkFbx8sNkMvEACZdAWyeQcEookGfKDER4PGrB35bntcO2SnItTZc8BOI3jAOBXTeBO16NwIDAQAB

我知道公钥中有模数和指数,我看过一个 xml RSA 密钥文件;但我不知道如何从这个纯字符串中提取这些部分。

有人知道如何完成我想要做的事情吗?

4

2 回答 2

1

这是一个 base-64 编码的 SubjectPublicKeyInfo(参见RFC 5280),用于 RSA 公钥。如您所述,它包含一个 RSA 模数和公共指数。

于 2010-02-02T12:33:56.987 回答
1

完成 GregS 的回答,假设您使用 Java 作为编程语言:

  1. 您应该将 Base64 编码转换为二进制。那里有一些 Base64 解码器,例如这个,它似乎是“公共领域”,因此可以随意重用。你也可以自己实现它;这并不难。维基百科为此提供了有用的链接。
  2. SubjectPublicKeyInfo使用ASN.1 结构解码二进制 blob 。这不是很容易(除非您掌握 ASN.1),但可以使用现有代码。特别是,Java 知道如何直接做到这一点。

Java中的公钥解码看起来像这样(假设二进制blob在变量中blob):

KeyFactory kf = KeyFactory.getInstance("RSA");
KeySpec ks = new X509EncodedKeySpec(blob);
RSAPublicKey pk = (RSAPublicKey)kf.generatePublic(ks);

RSAPublicKey实例中,你有不言自明的getModulus()和方法。getPublicExponent()相关的类在包中java.securityjava.security.interfacesjava.security.spec。对于您的公钥,这会产生以下结果:

modulus         = 102645155313298195029358862270152655993457886674545775623230610032728692959011417523892551564448476401788726191516935717690886291325065114613951136136194912439244754958152467056511740824446734443711392654194943771385565670988939260236433577393483222184597978937921816958725758100559250155638540637401770719799
public exponent = 65537
于 2010-02-02T14:30:37.070 回答