问题说明:
最近用到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;
}