2017-07-17 1 views
0

をgaves。私のキーで子供208であってもよいが、必要があります。は、私は、このメソッドを持っている私に不正な文字

getKey("pTSWJvy04hAU7ev7wmaTvpwHsEbseuPl0AlwoxPHnmoOIMATRT0eTqYpLJxDp4BHRFxDTrcUKHKVHGIAVut_-l6nkEI6ALOVW9C5PP9bXwqeHJ5tiGA6AMpaY1LsJJOd2lgExr0LHUPF2TtO4LOVmlptyGPTRSWhmRpPSc5bjGFsyTFr78WmeixjEts9icAUCiBDdpwVw9qVdjJPsufyimqp8os5htm-DB_qKsnRwABVSQRKLw2y7Mr7NP31R07Mpr108dLS5Et8tKnFoiX0MHf5BbA50NG3DtyT27nSa14T0IvSWYJQhxPWXYtuXkVldpbZZn8E2B1VpcDXXGnSPXoPstE9BU7w1RaF31UeEsE8sWDFdHgJMUYMfWjxVhdJB_NaVUt7v0X9QPffXcFPWKUUeVx0g_ONMz0bB_HltFSODWJeAvcZXk14u4sjpKXNIiK8dJzMe0Qn10m5nIdVtxzXfKHiDNobX1dMENDplhDMVk1eYS9x8dh90qt68Q59vKusm6iMjSaXtzwMfqJBwNck41e9Pie2m_cdSu-RIq1u3FScGkezzqNvIuzcse2y-6ApHkkaFMVsNw3CbD87LtVgNusuom38UVC1rS0LeLYFinU3hnFwvB1UCv1_0Cs8CmrOmdifqd25aZIDf5p8f3kowq3QY1mNtdQc9-HgZ3k"); 

は私にエラーを返します:

java.lang.IllegalArgumentException: Illegal base64 character 5f at java.util.Base64$Decoder.decode0(Base64.java:714) at java.util.Base64$Decoder.decode(Base64.java:526) at testJwt.testJwt.App.getKey(App.java:52) at testJwt.testJwt.App.main(App.java:76)

私は何ができますか?私は何か間違っているのですか?

答えて

1

データがいっぱいRSA公開鍵ではなく、単に弾性率、または「N」の値。 "e"値は、公開鍵の他の部分です。ここにそれを示すコード断片があります。

import java.math.BigInteger; 
import java.security.KeyFactory; 
import java.security.PublicKey; 
import java.security.spec.RSAPublicKeySpec; 
import java.util.Base64; 

public class Main { 

    public static void main(String[] args) throws Exception { 
     String jsonN = "pTSWJvy04hAU7ev7wmaTvpwHsEbseuPl0AlwoxPHnmoOIMATRT0eTqYpLJxDp4BHRFxDTrcUKHKVHGIA" + 
       "Vut_-l6nkEI6ALOVW9C5PP9bXwqeHJ5tiGA6AMpaY1LsJJOd2lgExr0LHUPF2TtO4LOVmlptyGPTRSWhmRpPSc5" + 
       "bjGFsyTFr78WmeixjEts9icAUCiBDdpwVw9qVdjJPsufyimqp8os5htm-DB_qKsnRwABVSQRKLw2y7Mr7NP31R0" + 
       "7Mpr108dLS5Et8tKnFoiX0MHf5BbA50NG3DtyT27nSa14T0IvSWYJQhxPWXYtuXkVldpbZZn8E2B1VpcDXXGnSP" + 
       "XoPstE9BU7w1RaF31UeEsE8sWDFdHgJMUYMfWjxVhdJB_NaVUt7v0X9QPffXcFPWKUUeVx0g_ONMz0bB_HltFSO" + 
       "DWJeAvcZXk14u4sjpKXNIiK8dJzMe0Qn10m5nIdVtxzXfKHiDNobX1dMENDplhDMVk1eYS9x8dh90qt68Q59vKu" + 
       "sm6iMjSaXtzwMfqJBwNck41e9Pie2m_cdSu-RIq1u3FScGkezzqNvIuzcse2y-6ApHkkaFMVsNw3CbD87LtVgNu" + 
       "suom38UVC1rS0LeLYFinU3hnFwvB1UCv1_0Cs8CmrOmdifqd25aZIDf5p8f3kowq3QY1mNtdQc9-HgZ3k"; 
     String jsonE = "AQAB"; 

     byte [] nBytes = Base64.getUrlDecoder().decode(jsonN); 
     byte [] eBytes = Base64.getUrlDecoder().decode(jsonE); 

     BigInteger n = new BigInteger(1, nBytes); // need to use the sign-magnitude constructor 
     BigInteger e = new BigInteger(1, eBytes); 

     RSAPublicKeySpec rsaPublicKeySpec = new RSAPublicKeySpec(n, e); 
     KeyFactory rsaKeyFactory = KeyFactory.getInstance("RSA"); 
     PublicKey rsaPub = rsaKeyFactory.generatePublic(rsaPublicKeySpec); 
     System.out.println(rsaPub); 
    } 
} 

ライブラリの推奨事項はオフトピックのstackoverflowではありますが、これを手作業で行うのではなく、私はすでにこれを行うライブラリを探します。

+0

これにより、同じ現象で私の問題が解決されました。 – Wrench

0

/+の代わりにと-がBase64文字列内にあるようです。そして、それはURLの安全base64エンコードである:あなたが持っている

Base64.getUrlDecoder().decode(key.getBytes()) 
+0

私は思ったが、今は 'java.security.spec.InvalidKeySpecException:java.security.InvalidKeyException:無効なキーフォーマット 'を取得する –

+0

結果のバイトを調べると、おそらく通常のBase64か何かです。 –

+0

バイトを使用すると、無効なキー形式が直接取得される –

関連する問題