- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 SecKeyEncryptedData 在 ojb-c 中加密,并尝试使用 javax.Cipher 在 Java 中解密并遇到问题。
我最近转向处理长 block ,并且需要使用对称加密以及使用非对称 key 对加密的 AES key 。我在解码时遇到问题。
我有 iOS key kSecKeyAlgorithmRSAEncryptionPKCS1,用于与 Java 中的 Cipher.getInstance("RSA/ECB/PKCS1Padding") 匹配的非对称数据。这对短 block 进行解码。
由于我需要发送更长的 block ,并且正在尝试在 iOS 上切换到 kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM 并且它加密得很好,但我找不到在 Cipher 中使用的方法来解密它,并且不明白是否需要在 Java 云中分两步完成。
OBJ-C:
java :
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM;
NSData* cipherText = nil;
cipherText = (NSData*)CFBridgingRelease( // ARC takes ownership<br/>
SecKeyCreateEncryptedData(self.pubKey, algorithm,
(__bridge CFDataRef)data, &error));
try {
cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, priv);
byte[] dog = decoder.decode(encString);
dec = cipher.doFinal(dog);
res = new String(dec);<br/>
} // handle errors
解码显然失败。
所以我的问题分为两部分。
最佳答案
is there a Cipher type that will do the decode needed
您可以阅读Cipher文档。我相信您正在寻找RSA/ECB/OAEPWithSHA-256AndMGF1Padding
我发现该名称与 Obj-C 名称并不完全匹配,但这是一个通用标准,因此可能值得一试
As I need to send longer blocks, and am trying to switch to kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM
您可以尝试搜索“混合加密”。与对称密码相比,非对称密码非常慢,并且仅用于加密有限数量的数据。
某些实现可能会加密更长的数据(对于每个 256 位输入提供 2048 或 4096 位输出),Java 只会提示并停止
所以正确的加密是
如果 kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM
与 RSA/ECB/OAEPWithSHA-256AndMGF1Padding
不对应(兼容),您仍可以通过此方法使用 PKCS#1 1.5 填充(旧填充)。
编辑:这个问题在使用 OAEP 时也可能很有用 RSA/ECB/OAEPWithSHA-256AndMGF1Padding but with MGF1 using SHA-256?
关于java - 如何在 Java 中解密 Obj-c 中加密的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55460429/
我是一名优秀的程序员,十分优秀!