Java和Objective-C中字符编码及DES加密解密 (三)

2014-11-24 11:33:06 · 作者: · 浏览: 4
ing*)key

{

NSData* data = [GTMBase64decodeString:cipherText];

NSUInteger bufferSize=([data length] + kCCKeySizeDES) & ~(kCCKeySizeDES -1);

char buffer[bufferSize];

memset(buffer, 0,sizeof(buffer));

size_t bufferNumBytes;

CCCryptorStatuscryptStatus = CCCrypt(kCCDecrypt,

kCCAlgorithmDES,

kCCOptionPKCS7Padding,

[key UTF8String],

kCCKeySizeDES,

iv,

[databytes],

[datalength],

buffer,

bufferSize,

&bufferNumBytes);

NSString* plainText = nil;

if (cryptStatus ==kCCSuccess) {

NSData *plainData =[NSData dataWithBytes:buffer length:(NSUInteger)bufferNumBytes];

NSLog(@"plainTextBytes:%@",[XYDES dataToHex:plainData]);

plainText = [[NSStringalloc] initWithData:plainData encoding:NSUTF8StringEncoding];

}

return plainText;

}

加密后的字节流采用[GTMBase64 stringByEncodingData:data];方法进行编码,在解密方法中采用[GTMBase64 decodeString:cipherText];进行解码。这么做的目的是为了密文更好地保存和运输。

更多的加密解密技术字节,可google一下CCCrypt方法。

4.总结
实现Java和Objective-C中加密解密数据一致性是整个问题的关键,需要有下列四点保证措施。

1、字符串采用UTF8编码后的字节要一致;

2、UTF8编码后的字节在base64上编码也要一致;

3、采用的算法一致;

在Objective-C中采用DES的kCCOptionPKCS7Padding,而在Java中采用PKCS5Padding,在密钥都是8个字节的前提下,这两个方式加密解密结果一样。

4、加密后的字节流要一致;

这是验证加密算法的一个标准,如果这个都不一致,需检查加密算法。

只要实现了以上四点,就能保证在客户端通过Objective-C加密后发送一个密文,在服务器端通过Java就能解密,反之也可。