2014-10-04 85 views
0

我正在开发iOS应用程序。在该应用程序内部,我必须调用SOAP服务并发送加密数据。要与SOAP服务进行通信,我必须使用已经使用Android应用程序的相同配置。在该应用程序下面的代码存在:如何将Java(Android)加密参数转换为iOS加密?

private static final String ENCRYPTION_KEY_TYPE = "DESede"; 
    private static final String ENCRYPTION_ALGORITHM = "DESede/CBC/PKCS7Padding"; 

我需要转换的是PARAMS这样我就可以CCCrypt功能使用它们。我猜想DESede键类型对应于kCCAlgorithm3DES。对于算法我读CBC是默认的,所以我想我必须使用kCCOptionPKCS7Padding。我也有iv键。

我的推定是否正确?

回答

1

确保密钥和iv是正确的正确的长度。

“DESede” 是指:
DES(数据加密标准),它不应该被用于新的工作。
ede表示加密,解密,加密3DES(三重DES - 168位,24字节),其密钥用法与DES相当(单DES -56位,8字节),密钥分为三个密钥第一个用于加密,第二个用于解密,第三个用于加密(ede)。使用不同的加密和解密序列也是可能的,但不是标准的,所以检查一下。

请注意,每个字节中的高位是奇偶校验,通常会被忽略。

iv可能会有问题,因为除非静态必须与加密数据一起传输,否则一种常用方法是将iv预先挂接到加密数据。

填充也可能有所不同,PKCS#7是通用标准,但某些实现(如PHP)使用非标准填充。对于PKCS#7,加密长度为总是至少比明文数据长一个字节。对于这种类型的加密,PKCS#5基本相同。

+0

10倍重播。我对iOS很新,我对C和Crypto有一些经验。我在谷歌搜索,我发现[解决方案](http://www.phonesdevelopers.com/1782361/),返回我需要的确切字符串(我从SOAP服务对于给定的一组params正确的字符串)。 – new2ios 2014-10-04 12:04:42