2017-01-06 17 views
0

私はアンドロイドプロジェクトを持っていて、RSA暗号化を使用しています。アンドロイドクライアントとJavaサーバーの間で問題なく動作します。公開鍵と秘密鍵はAndroid APIを使用して生成されました。今私はIOSプロジェクトで同じRSAを使用し、同じキーを使用したいと思います。残念ながら、うまくいきません。 IOSクライアントで暗号化と復号化を行うことができます。 Javaサーバーで復号化されると、エラーが発生します。 暗号化にkSecPaddingPKCS1を使用し、復号化にRSA/NONE/OAEPWithSHA1AndMGF1Paddingを使用します。RSAでiosで暗号化し、javaサーバで復号化できない

参照: 1. RSA: encrypt in iOS, decrypt in Java 2. RSA implementations in Objective C

誰でも助けることができる、ありがとうございました。

+0

例にリンクしていないコードを投稿すると便利です – pedrofb

答えて

0

あなたは、iOSのcilentで暗号化と復号化ができると言うと、公開鍵と秘密鍵が正しいことを表しています。したがって、問題はcilentとserverの間です。私はこれまで私のプロジェクトでこれをやってきたので、私はあなたのためにいくつかのポイントがあります。

1.RSAキーにはいくつかの異なるビットがあります。 512ビット、1024ビットのように。あなたはiOSのthis.Encryptをチェックする必要があります、javaサーバで復号化と同じビットを使用します。

2.追加の暗号化を使用します。 base64と同様に、Javaサーバーと同じスタイルを使用していることも確認します。

これは関連記事です。http://www.jianshu.com/p/db85399e8a76 希望がお手伝いします。

+0

ありがとうございます。私は、IOSとJavaの間で同じビットを使用していると確信しています。そして、私もbase64を使いました。しかし、それはまだ動作しませんでした。 – user6299706

+0

おそらく、問題はbase64にあります。 websafe/NoPadding/Paddingなど、base64で他のスタイルを使用しようとする可能性があります。 base64では同じスタイルを使用することが重要です。 – pusswzy

1

私は、暗号化と復号化に異なるアルゴリズムを使用しています(私の限られた暗号化の知識で)互換性がないことがわかります。

kSecPaddingPKCS1kSecPaddingOAEPと変更すると、最初のリンクの回答が示唆されます。

+0

はい、私はkSecPaddingPKCS1をkSecPaddingOAEPに置き換えましたが、それも機能しませんでした。私は、私のアプリケーションクライアントで暗号化と復号化を行うことができます。 @pedrofb、ありがとう – user6299706

+0

iOSとJavaのコードを分析してそれを分析する – pedrofb

関連する問題