MD5:首先,md5不是加密。
md5是摘要算法,主要是用来做认证,利用自身优势(不可逆、低碰撞率)解决公开网络中交换密钥、认证的问题,
MD5相当于超损压缩,在计算过程中原文的部分信息会丢失。
MD5为什么不可逆?例子:
快点赞啊亲
加密规则:
每个字取拼音声调+笔画数,最后的结果计算乘积,为了也使得我的结果始终保持在一个限定范围内,取最后结果取其与2^14=16384的余数(随便取的,你们就当我有二进制强迫症吧)
如 快 是7画,4声,也就是“特征值11”,以此类推 点9+3=12 赞16+4=20 啊10+4=14 亲9+1=10
最后我发明的不可逆函数值就是
11*12*20*14*10=26400与16384的余数,也就是10016
如果单单给10016这个数字和加密算法,你是无论如何不可能推倒出原文是“快点赞啊亲”的,不过如果给你“快点赞啊亲”你却很容易验证答案是否正确。
签名有什么用?例子:
Encryption是为了保护明文的隐私性(privacy),防止隐私泄漏。设想一对小青年Alice和Bob还在暧昧中,俩人偷偷摸摸地去约会吃饭,不想让别人知道。Alice想告诉Bob今天约会时几点去吃饭,但是不想让其他任何人(可以抽象为以她的情敌Carol为代表的一切其他人)知道他俩的吃饭时间,这时候就用到加密。加密后解密者可以从密文(ciphertext)中恢复出明文(plaintext),也就是吃饭时间。
苹果包装了MD5加密的方法,使用起来十分的方便。
1、 导入头文件
- #import<CommonCrypto/CommonDigest.h>
2、加密的方法:
- (NSString *) md5:(NSString *) input {
const char *cStr = [input UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, strlen(cStr), digest ); // This is the md5 call
NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_MD5_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
return output;
}
NSString *str = @"123456";
NSString *result = [self md5:str];
NSLog(@"%@",result);
输出的结果如图所示: