为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

收到一只叮咚 2022-09-14 16:09:53
我正在使用加密数据在ojb-c中加密,并尝试使用爪哇x在Java中解密。密码并遇到问题。我最近开始做长块,并且需要使用对称加密,并使用非对称密钥对加密的AES密钥。我在解码时遇到问题。我有 iOS 密钥 kSec密钥算法加密PKCS1 适用于与 Java 中的密码匹配的非对称数据(“RSA/ECB/PKCS1 填充”)。这将解码短块。由于我需要发送更长的块,并且正在尝试切换到kSecKey算法MRSA加密OAEPSHA512AESGCM在iOS上加密,它加密得很好,但我找不到在密码中使用的方法来解密它,并且不明白是否需要在Java的云中以2个步骤完成。黑白-C: 爪哇:    SecKeyAlgorithm algorithm = kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM;    NSData* cipherText = nil;    cipherText = (NSData*)CFBridgingRelease(      // ARC takes ownership                    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);    } // handle errors解码显然失败了。所以我的问题分为两部分。是否有密码类型可以执行所需的解码,或者我是否需要分解加密的AES密钥并首先解密它?如果我需要分解它,那么数据块的加密AES密钥部分有多长,如果你知道密码,那将是太棒了。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

是否有一种密码类型可以执行所需的解码

您可以阅读密码文档。我相信你正在寻找RSA/ECB/OAEPWithSHA-256AndMGF1Padding

我看到名称与Obj-C名称不完全匹配,但这是一个通用标准,因此可能值得一试

由于我需要发送更长的块,并且正在尝试切换到 kSecKey算法加密OAEPSHA512AESGCM

您可以尝试搜索“混合加密”。与对称密码相比,非对称密码非常慢,并且仅用于加密有限数量的数据。

无论如何,某些实现可能会加密更长的数据(对于每个提供2048 o 4096位输出的256位输入),Java只会抱怨并停止

因此,适当的加密将是

  • 使用对称密码使用拉多姆密钥(DEK - 数据加密密钥)加密数据

  • 使用非对称公钥加密 DEK

如果 与 不对应(兼容),您仍然可以使用 PKCS#1 1.5 填充(旧填充)和此方法。kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCMRSA/ECB/OAEPWithSHA-256AndMGF1Padding

编辑:当使用OAEP时,这个帮助器可能很有用 RSA / ECB / OAEP与SHA-256和MGF1填充,但与MGF1使用SHA-256?


查看完整回答
反对 回复 2022-09-14
  • 1 回答
  • 0 关注
  • 137 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信