数据安全一直是互联网的核心。对于我们开发来说,数据加密就是对用户的负责。很简单的举个例子:登陆功能,用户要输入密码,如果app传给服务器的密码是明文,那么用户的信息就泄露了。之前12306不是出了个事件,用户信息泄露,密码也是明文。这是很恐怖的。好了,不说了。我们直接上代码.
MD5
+ (NSString *)getMd5_32Bit_String:(NSString *)srcString
{
const char *cStr = [srcString UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), digest );
NSMutableString *result = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[result appendFormat:@"%02x", digest[i]];
return result;
}
RSA
DES
+(NSString *) encryptUseDES:(NSString *)clearText key:(NSString *)key
{
NSData *data = [clearText dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
unsigned char buffer[1024];
memset(buffer, 0, sizeof(char));
size_t numBytesEncrypted = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
kCCAlgorithmDES,
kCCOptionPKCS7Padding| kCCOptionECBMode,
[key UTF8String],
kCCKeySizeDES,
nil,
[data bytes],
[data length],
buffer,
1024,
&numBytesEncrypted);
NSString* plainText = nil;
if (cryptStatus == kCCSuccess) {
NSData *dataTemp = [NSData dataWithBytes:buffer length:(NSUInteger)numBytesEncrypted];
plainText = [GTMBase64 stringByEncodingData:dataTemp];
}else{
NSLog(@"DES加密失败");
}
return plainText;
}
RSA我用到了GTMBase64.h,GTMBase64.m,GTMDefines.h这三个文件,项目中还需要引用libcommonCrypto.dylib这个库。
PS
我把这三个文件都放在这里。