iOS アプリケーションから Java バックエンドに通信しようとしています。 SecKeyCreateEncryptedData で暗号化に .rsaEncryptionOAEPSHA256 アルゴリズムを使用すると、バックエンドで次のスタックトレースが表示されます。
Caused by: java.lang.SecurityException: Exception thrown while invoking doFinal(byte[]).
at ... 101 common frames omitted
Caused by: javax.crypto.BadPaddingException: Decryption error
at java.base/sun.security.rsa.RSAPadding.unpadOAEP(RSAPadding.java:497)
at java.base/sun.security.rsa.RSAPadding.unpad(RSAPadding.java:292)
at java.base/com.sun.crypto.provider.RSACipher.doFinal(RSACipher.java:366)
at java.base/com.sun.crypto.provider.RSACipher.engineDoFinal(RSACipher.java:392)
at java.base/javax.crypto.Cipher.doFinal(Cipher.java:2207)
... 103 common frames omitted
Java バックエンドは、SunJCE プロバイダの RSA/ECB/OAEPWithSHA-256AndMGF1Padding アルゴリズムを使用しています。このプロバイダーは、MGF1 ダイジェストに SHA-1 を使用します。ただし、iOS のデフォルトでは SHA-256 が使用されます。
iOS のコードでこれを変更して互換性を持たせるにはどうすればよいですか?
注: 明確にするために、バックエンドが Java で RSA/ECB/PKCS1Padding を使用する iOS 上の .rsaEncryptionPKCS1 では、まったく同じ操作が現在正常に動作しています。
MGF1ParameterSpec.SHA256 を使用するように Java 暗号を更新することもできますが、残念ながら Android ではサポートされていないため、iOS で OAEP パラメータ仕様を再構成することをお勧めします。
– マーラー
2020 年 9 月 3 日 17:40
ちょっとした好奇心から、.rsaEncryptionOAEPSHA1 を試してみましたか?それが MGF を設定するのか、それともメッセージのハッシュ関数のみを設定するのかわかりません...
– ブラム
12 月2020 年 3 月 30 日、1:30
.rsaEncryptionOAEPSHA1 - 機能しません
– レオニフ
2022 年 12 月 13 日 9:34
------------------------
私が調査した結果から、同じ問題に直面しました。実験した結果、iOS で RSA/ECB/OAEPWithSHA-256AndMGF1Padding をサポートすることは事実上不可能です。
同様の問題: RSA/ECB/OAEPWithSHA-256AndMGF1Padding Swift の暗号化
しかし、これはアルゴリズムのみを扱っており、p については扱っていません。問題を追加します。
共有
この回答を改善します
フォローする
2021 年 2 月 25 日 2:29 に回答
サムクロ
サムクロ
11
1
銅バッジ 1 個
1
この質問に対する答えはありますが、答えの主要部分が投稿にある方がよいでしょう。
– ユスフ・ヘイırsever
2021 年 2 月 25 日 6:07