常用的加密方式很多,比如MD5,SHA,DES,AES,RSA等,主要分为两类,对称加密如DES,AES,非对称加密RSA,MD5,SHA,此外,MD5与SHA加密不可逆。
RSA加密比较安全,但是密文比较长,此外,HTTPS传输本身使用了RSA算法,这里我们主要用用DES加密一下缓存数据。
网上找了DES加密解密的算法。
/*字符串加密
*参数
*plainText : 加密明文
*key : 密钥 64位
*/
- (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
NSString *ciphertext = nil;
const charchar *textBytes = [plainText UTF8String];
NSUInteger dataLength = [plainText length];
size_t bufferPtrSize = (dataLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
unsigned char* buffer = (unsigned charchar *)malloc(bufferPtrSize);;
memset(buffer, 0, bufferPtrSize);
Byte iv[] = {1,2,3,4,5,6,7,8};
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String], kCCKeySizeDES,
iv,
textBytes, dataLength,
buffer, bufferPtrSize,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
ciphertext = [[NSString alloc] initWithData:[data base64EncodedDataWithOptions:0] encoding:NSUTF8StringEncoding];
}
free(buffer);
return ciphertext;
}
//解密
- (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key
{
NSData* cipherData = [[NSData alloc] initWithBase64EncodedString:cipherText options:0];
NSUInteger dataLength = [cipherText length];
size_t bufferPtrSize = (dataLength + kCCBlockSizeDES) & ~(kCCBlockSizeDES - 1);
unsigned char* buffer = (unsigned charchar *)malloc(bufferPtrSize);;
memset(buffer, 0, bufferPtrSize);
size_t numBytesDecrypted = 0;
Byte iv[] = {1,2,3,4,5,6,7,8};
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding,
[key UTF8String],
kCCKeySizeDES,
iv,
[cipherData bytes],
[cipherData length],
buffer,
bufferPtrSize,
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
free(buffer);
return plainText;
}