gpt4 book ai didi

java - 如何在 Java 中解密 Obj-c 中加密的数据

转载 作者:太空宇宙 更新时间:2023-11-04 09:45:38 25 4
gpt4 key购买 nike

我正在使用 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:
SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM;
NSData* cipherText = nil;
cipherText = (NSData*)CFBridgingRelease( // ARC takes ownership<br/>
SecKeyCreateEncryptedData(self.pubKey, algorithm,
(__bridge CFDataRef)data, &error));
java :
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

解码显然失败。

所以我的问题分为两部分。

  1. 是否有一种密码类型可以完成所需的解码,或者我是否需要先破解加密的 AES key 并解密?
  2. 如果我需要分解它,数据 block 的加密 AES key 部分有多长,如果您知道其密码,那就太棒了。

最佳答案

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 只会提示并停止

所以正确的加密是

  • 使用对称密码通过随 secret 钥(DEK - 数据加密 key )加密数据
  • 使用非对称公钥加密 DEK

如果 kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCMRSA/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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com