我正在开发 iOS 应用程序。在该应用程序中,我必须调用 SOAP 服务并发送加密数据。要与 SOAP 服务通信,我必须使用已在使用 Android 应用程序的相同配置。在该应用程序中存在以下代码:
private static final String ENCRYPTION_KEY_TYPE = "DESede";
private static final String ENCRYPTION_ALGORITHM = "DESede/CBC/PKCS7Padding";
我需要转换该参数,以便我可以将它们与 CCCrypt
函数一起使用。我假设 DESede
键类型对应于 kCCAlgorithm3DES
。对于算法,我读到 CBC
是默认的,所以我想我必须使用 kCCOptionPKCS7Padding
。我还有 iv
键。
我的假设是否正确?
最佳答案
确保 key 和 iv 的长度完全正确。
“DESede”是指:
DES(数据加密标准),不应将其用于新工作。
ede 表示加密、解密、加密 3DES(三重 DES - 168 位,24 字节), key 用法与 DES(单 DES - 56 位,8 字节)向后相当, key 被破解分为三个 key ,其中第一个用于加密,第二个用于解密,第三个用于加密 (ede)。也可以使用不同的加密和解密序列,但不是标准的,因此请检查一下。
注意,每个字节中的高位是奇偶校验,一般会被忽略。
iv 可能会有问题,因为除非静态必须与加密数据一起传输,否则一种常见的方法是将 iv 添加到加密数据之前。
填充也可能不同,PKCS#7 是通用标准,但某些实现(例如 PHP)使用非标准填充。使用 PKCS#7,加密长度将始终至少比纯数据长一个字节。 PKCS#5 对于这种类型的加密本质上是相同的。
关于java - 如何将 java (Android) 加密参数转换为 iOS 加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26191442/