问题说明:
近期用到DES加密,而且要与java的Cipher类加密的结果保持一致。没研究过java的Cliper,但工作中Cipher依据DES/CBC/PKCS5Padding加密方式生成了一个字符串。
比較后发现,此字符串与将OC加密生成的NSData直接用字符串格式化([NSString stringWithFormat:@"%@",data])同样。所以就先这么用了。
代码例如以下:
#import "CommonCrypto/CommonCryptor.h" + (NSString *)encryptUseDES:(NSString *)plainText andKey:(NSString *)authKey andIv:(NSString *)authIv{ const void *iv = (const void *) [authIv UTF8String]; NSString *ciphertext = nil; NSData *textData = [plainText dataUsingEncoding:NSUTF8StringEncoding]; NSUInteger dataLength = [textData length]; unsigned char buffer[1024]; memset(buffer, 0, sizeof(char)); size_t numBytesEncrypted = 0; CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [authKey UTF8String], kCCKeySizeDES, iv, [textData bytes], dataLength, buffer, 1024, &numBytesEncrypted); if (cryptStatus == kCCSuccess) { NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted]; NSString *oriStr = [NSString stringWithFormat:@"%@",data]; NSCharacterSet *cSet = [NSCharacterSet characterSetWithCharactersInString:@"< >"]; ciphertext = [[oriStr componentsSeparatedByCharactersInSet:cSet] componentsJoinedByString:@""]; } return ciphertext; }