10

状況JavaでのRSA暗号化:クロスプラットフォームの問題?

私はJavaでRSA暗号化を行っています。私は、CyanogenmodのAndroid 2.2を搭載したHTC Saphire(32B)開発者用携帯電話でデータを暗号化し、次にMandriva Linux 2010を実行する64ビットサーバー上でそのデータを暗号化しようとしています。私は同じ公開鍵と秘密鍵のペアを両方のマシンAndroidの電話機でデータを正しく暗号化/復号化でき、Linuxサーバー上のデータを正しく暗号化/復号化できますが、データを暗号化してサーバー上で復号化することはできません。私は詰め物の例外が悪いです。データが電話で正しく送信され、サーバーによって正しく解析されていることを確認しました。このように、私は解読が失敗する理由を理解できません。誰もこれで私を助けることができますか?おそらく、JavaのRSAアルゴリズムには、単語サイズについての根本的な仮定がありますか?

詳しい情報:

  • 私の暗号化/復号化ライブラリがガイドに基づいていますがhere.
  • を見つけた私の暗号化キーの長さは2048ビットですが、私は別のキーサイズで同様の現象を参照してください。
  • RSA暗号化/復号化コードをjarファイルにパッケージングしました。これは、Eclipseを使用してサーバーのマシン上でコンパイルされました。
  • Android携帯の暗号化ライブラリを使用しているプログラムは、上記のライブラリを使用しています。それもEclipseを使用して構築されました。
  • サーバープログラムは、Netbeansを使用して構築されました(そのようにする方が簡単でした)。

その他の質問

  • は、Javaのための利用可能その他無料公開鍵暗号化アルゴリズム/ライブラリはありますか?彼らはクロスプラットフォームで動作しますか?彼らはどのようなパフォーマンスを期待していますか?私はこれを見てきましたが、それほど多くは見つかりませんでした。おそらく私は間違ったキーワードを探しています。

Phew!私はそうだと思います。事前にあなたの助けをありがとう!

+0

任意のアルゴリズムは、クロスプラットフォームで動作する必要があり、問題はあなたのコード(または設定)である可能性が高い – bestsss

+0

Configを、えっ? RSAについて何が設定可能ですか? Javaでこれをどうやってやるのだろうか?チュートリアルへのリンクを提供できますか?私はあなたの時間を取ることを望んでいませんが、自分自身が正しい方向に向いているような専門家(経験者)を持つことは、本当に私の人生を楽にします。 –

+0

(SRYが夕食のために逃げた)私は、公開鍵/秘密鍵として設定を意味し、悪いパディングはほとんどひどく鍵ペアを交換によって引き起こされます。あなたが何らかの理由でアンドロイドが太陽のインプラントと同じパディングをサポートしていないと確信しているなら。 http://www.bouncycastle.org/btwを試してみてください。同じデバイス/マシン上でデータを暗号化/復号化するにはどうすればよいですか? – bestsss

答えて

12

RSA暗号化(または任意の暗号化アルゴリズム)は、環境に関係なく動作するはずです。ただし、一部のシステムでは、デフォルトのパディングと操作モードについて異なる前提を設定する可能性があります。暗号化と復号化を実行するときは、アルゴリズムだけでなく、操作モード(CBCなど)とパディングも完全に指定する必要があります。それでも問題が解決しない場合は、デバイスとサーバーの両方からコードを送信することをお勧めします。

編集クリプトパッケージから暗号を取得するとき、あなたは通常、次のコードでそれを行う、Javaで、あなたの質問に対処するために:

Cipher cipher; 
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

getInstanceに提供される文字列は、ランタイムに指示AESアルゴリズム、暗号ブロック連鎖操作モード、およびPKCS5パディングを使用する暗号インスタンスを取得します。サポートされているアルゴリズムとパディングがいくつかあります。Javaでの暗号化の詳細については、this document from Oracleを参照してください。

具体的には、あなたが暗号を要求するために使用する文字列は、Javaは、多数のアルゴリズムを提供するにもかかわらず、さらに悪いことにはフォーマット

<algorithm>/<mode of operation>/<padding> 

であり、動作やパディングのモードではなく、すべてのそれらは一緒に働くでしょう。動作する設定文字列を見つけるには、ドキュメントを読む必要があります。

+0

操作モードとパディングをどのように指定しますか?私は実際にRSAを使用するときに切り替えることができるすべてのオプションを認識していません。私が始めることのできる良いリンクや、一般的なアドバイスをしていますか? –

+0

あなたのリンクとアドバイスは非常に有望です。私は今それを試すことはできませんが、水曜日の私はチャンスを得るかもしれません。できるだけ早く報告するようにします。ちょうど私があなたを理解していることを確実にするために、私は暗号を作成するたびに、私は、アルゴリズム、モード、およびパディングを指定し、これは右、作られている任意のプラットフォーム依存の仮定を明確アップ_potentially_だろうか? –

+0

これはうまくいきました。これまで私が以前に何も支配していなかったという仮定がいくつかあったに違いない。ご協力いただきありがとうございます! –

0

おそらく、データのチェックサムを作成し、それが暗号化/復号化APIに渡されるものであることを確認する必要があります。

+0

ああ、私はすでにチェックサムを実行しています。私が言ったように、データがうまく到着しているように見える(とそれを作成したシステム上で復号化することができる)が、電話で暗号化されたデータは、デバイス上で復号化することができません。それにもかかわらず、助言のおかげで! –