2011-12-30 15 views
0

誰もが、私は最近、PCとAndroidの両方でRSA暗号化を実装しました。 PC(JDK1.6)が、私は(JDK1.5でアンドロイド2.1)Android上で試すのもいくつかの作品は、エラーが妙に発生します。AndroidのjvmはkeyFactory generatePublic()をサポートしていませんか?

コードは次のようである:



    BigInteger m = m; 
    BigInteger e = e; 
    RSAPublicKeySpec keySpec = new RSAPublicKeySpec(m, e); 
    KeyFactory fact = KeyFactory.getInstance("RSA"); 

    try{ 
     PublicKey pubKey = fact.generatePublic(keySpec); 
     return pubKey; 
     } catch (Exception e) { 
      throw new RuntimeException("Spurious serialisation error", e); 
     } 
    return null; 

 

問題でのPublicKey pubkeyで= fact.generatePublic(keySpec)。は例外を引き起こすようですが、私はそれをキャッチすることはできません。Throwable eに変更してください。それはちょうどに戻ります。実際には戻り値はnullではありません。通常の指数(65537)と不良モジュラス(「ae3432a ***」の文字で埋められます)を持つPubkeyです。

誰でも私のためにテストできますか? ?。私たちは、Android 2.3.6のAppでRSA-PUBLICKEYを使用する私たちは、次のコードを使用してキーを生成

答えて

0

:。

// data[] is pre-filled with modulus and publicExponent 
String ENCRYPTION_ALGORITHM = "RSA"; 

BigInteger modulus = (BigInteger) data[0]; 
BigInteger publicExponent = (BigInteger) data[1]; 

PublicKey publicKey = getKeyFactory().generatePublic(new RSAPublicKeySpec(modulus, publicExponent)); 
return publicKey; 

private static KeyFactory getKeyFactory() { 
    if (keyFactory == null) { 
     try { 
      keyFactory = KeyFactory.getInstance(ENCRYPTION_ALGORITHM); 
     } catch (NoSuchAlgorithmException e) { 
      // Algorithm is part of every Android installation. Since we do not get here under realistic 
      // circumstances it is OK to crash here. 
      throw new HellFrozeOverException(); 
     } 
    } 
    return keyFactory; 
} 

私は右のそれを見た場合、あなたが同じことを行う申し訳ありませんが、私はその

+0

Tobiasありがとう、私はこれらのコードをデバッグ、私はそれが間違っている可能性があります提供r、jdk1.5は___Provider:SunRsaSign___を使用し、android 2.1はbouncycastle 1.43を使用しますが、まだ解決できませんでした。 –

+0

あなたはAndroid 2.3.6でこれらのコードをテストします。 –

+0

はい、このコードをテストしたところ、うまくいきました。 NFCの問題のため、私たちはAndroid 4に変更することにしました。 – Tobias

関連する問題