应用场景:
保存一些nsstring不希望别人看到,就简单加密,提取时解密
加密的原理看这里点击打开链接
新建一个DESTool的类,使用方便,不使用
开源库 GTMBase64 转码
ios7之后自己支持了base64的转码,所以不要再引入一个库了
将h和m文件贴到如下
h文件
//
// DESTool.h
// testDES
//
// Created by apple on 16/9/11.
// Copyright © 2016年 apple. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface DESTool : NSObject
+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key;
+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key;
@end
m文件
//
// DESTool.m
// testDES
//
// Created by apple on 16/9/11.
// Copyright © 2016年 apple. All rights reserved.
//
#import "DESTool.h"
#import <CommonCrypto/CommonCryptor.h>
@implementation DESTool
/*字符串加密
*参数
*plainText : 加密明文
*key : 密钥 64位
*/
+ (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key
{
NSString *ciphertext = nil;
const char *textBytes = [plainText UTF8String];
NSUInteger dataLength = [plainText length];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
Byte iv[] = {1,2,3,4,5,6,7,8};
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES,
kCCOptionPKCS7Padding|kCCOptionECBMode,
[key UTF8String], kCCKeySizeDES,
iv,
textBytes, dataLength,
buffer, 1024,
&numBytesEncrypted);
if (cryptStatus == kCCSuccess) {
NSData *data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
ciphertext = [self encodeData:data];
}
return ciphertext;
}
//解密
+ (NSString *) decryptUseDES:(NSString*)cipherText key:(NSString*)key
{
NSData* cipherData = [self decodeString:cipherText];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesDecrypted = 0;
Byte iv[] = {1,2,3,4,5,6,7,8};
CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding|kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
iv,
[cipherData bytes],
[cipherData length],
buffer,
1024,
&numBytesDecrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData* data = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesDecrypted];
plainText = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
}
return plainText;
}
+ (NSString *)encodeData:(NSData *)originData{
NSString* encodeResult = [originData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
// NSString* encodeResult = [originData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
return encodeResult;
}
+ (NSData *)decodeString:(NSString *)encodeResult{
NSData* decodeData = [[NSData alloc] initWithBase64EncodedString:encodeResult options:0];
// NSString* decodeStr = [[NSString alloc] initWithData:decodeData encoding:NSASCIIStringEncoding];
return decodeData;
}
@end