2017-05-17 6 views
0

私はAndroidでRSA暗号化データをサーバーに送信しようとしています(春)。 BadPaddingExceptionを取得中:RSA Bad Padding例外

アプローチ: サーバーは公開鍵オブジェクトを公開鍵オブジェクトに変換し、暗号化後にアプリケーションからデータを文字列として送信します。 サーバーには、PublicKeyオブジェクトに変換され、データが復号化される秘密キー文字列があります。

ご協力いただければ幸いです。キーの

世代:

public static KeyPair generateKeyPairRSA() { 
    try { 
     SecureRandom random = SecureRandom.getInstance("SHA1PRNG"); 
     KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); 
     keyGen.initialize(1024, random); 
     KeyPair keyPair = keyGen.generateKeyPair(); 
     return keyPair; 
    } catch (Exception e) { 
     Log.d(TAG,e.getLocalizedMessage()); 
    } 
    return null; 
} 


public byte[] RSAEncrypt(final String plain, PublicKey publicKey) throws Exception { 
    Cipher cipher = Cipher.getInstance(ALGO_RSA); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    byte[] encryptedBytes = cipher.doFinal(plain.getBytes()); 
    return encryptedBytes; 
} 

public static PublicKey loadPublicKey1(String stored) throws Exception{ 
    byte[] data = Base64.decode(stored.getBytes()); 
    X509EncodedKeySpec spec = new X509EncodedKeySpec(data); 
    KeyFactory fact = KeyFactory.getInstance(ALGO_RSA); 
    return fact.generatePublic(spec); 
} 

サーバー方法:

public byte[] decryptRSA(String inputData) throws Exception { 
    byte[] inputBytes = Base64.decodeBase64(inputData); 
    PrivateKey key = loadPrivateKey(getPrivateKey()); 
    Cipher cipher1 = Cipher.getInstance("RSA"); 
    cipher1.init(Cipher.DECRYPT_MODE, key); 
    return cipher1.doFinal(inputBytes); 
} 

private PrivateKey loadPrivateKey(String key64) throws Exception { 
    byte[] pkcs8EncodedBytes = Base64.decodeBase64(key64); 
    PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(pkcs8EncodedBytes); 
    KeyFactory kf = KeyFactory.getInstance("RSA"); 
    return kf.generatePrivate(keySpec); 
} 
+0

ちょうど好奇心から、 'ALGO_RSA'はどこにマップされていますか? – jiveturkey

+0

RSA。それを解決しました。ありがとう – Makwana

答えて

0

ワーキングそれを手に入れました。 異なるlibには、Cipherのdifferenet実装があります。 コール中

Cipher.getInstance( "RSA/ECB/PKCS1Padding");

明示的に暗号化モードとパディングについて言及します。

誰かに役立つことを願っています。

関連する問題