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),也就是吃饭时间。


到MAC的时候场景就变了。这时候Alice和Bob这对小(gou)青(nan)年(nv)关系已经很稳定了,路人皆知了。但是情敌Carol依然存在,贼心不死。Alice这个时候再也不怕俩人约会吃饭的时间被别人看到了,她怕的是情敌篡改时间,让俩人不能碰面。于是她以明文发送时间,然后再附上对这个时间的MAC。Carol如果篡改了时间,那么MAC是照应不上的。也就是,此时不是为了保护这个约会时间的隐私性,而是为了保护它的完整性(integrity)。


iOS上的MD5使用:



苹果包装了MD5加密的方法,使用起来十分的方便。

1、 导入头文件

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;
} 3、调用加密方法: 
  
 NSString *str = @"123456";

 NSString *result = [self md5:str];

 NSLog(@"%@",result);

 

输出的结果如图所示:

Android 和 ios 的md5加密结果不一样 ios md5加密解密_特征值