2010-02-02 84 views
1

我的夥伴給我,看起來像這樣的RSA公鑰:轉換公/私密鑰字符串RSA的xmlString

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

我知道有模數和指數中的公鑰,我見過的xml RSA密鑰文件;但我不知道如何從這個純字符串中提取這些部分。

有人會知道如何完成我想要做的事嗎?

回答

1

這是一個base-64編碼的SubjectPublicKeyInfo(請參閱RFC 5280),用於RSA公鑰。如您所述,它包含RSA模數和公開指數。

1

要完成GregS的答案,假設你使用Java作爲編程語言:

  1. 你應該變換Base64編碼成二進制。這裏有一些Base64解碼器,例如this one,似乎是「公有領域」,因此可以隨意重複使用。你也可以自己實現它;這並不難。 Wikipedia具有有用的鏈接。
  2. 使用SubjectPublicKeyInfo ASN.1結構解碼二進制斑點。這不是很容易(除非你掌握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.security,java.security.interfacesjava.security.spec。對於您的公鑰,這產生以下結果:

modulus   = 102645155313298195029358862270152655993457886674545775623230610032728692959011417523892551564448476401788726191516935717690886291325065114613951136136194912439244754958152467056511740824446734443711392654194943771385565670988939260236433577393483222184597978937921816958725758100559250155638540637401770719799 
public exponent = 65537