将公钥/私钥字符串转换为RSA xmlstring

时间:2010-02-02 11:08:47

标签: rsa public-key

我的合作伙伴给了我一个RSA公钥,如下所示:

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  1. 您应该将Base64编码转换为二进制。那里有一些Base64解码器,例如this one,似乎是“公共领域”,因此可以随意重复使用。你也可以自己实现它;这并不难。 Wikipedia具有相关的有用链接。
  2. 使用SubjectPublicKeyInfo ASN.1结构解码二进制blob。这不是很容易(除非您掌握ASN.1),但可以使用现有代码。特别是,Java知道如何直接这样做。
  3. 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
    
相关问题