MD5是什么?
MD5:全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
原理、效果与特点
- 原理:文件”指纹” 世界上没有两个完全一模一样的指纹(不同的文件加密之后,不会出现两个一样的值.)
- 作用:一般用作文件检验
- 效果:对输入信息生成唯一的128位散列值(32个字符)
MD5的特点:
(1)输入两个不同的明文不会得到相同的输出值
(2)根据输出值,不能得到原始的明文,即其过程不可逆MD5的应用
由于MD5加密算法具有较好的安全性,而且免费,因此该加密算法被广泛使用
主要运用在数字签名、文件完整性验证以及口令加密等方面MD5破解:MD5解密网站:http://www.cmd5.com
MD5算法还具有以下性质:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
5、强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
6、MD5改进:现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文
MD5改进
现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度
加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5
先加密,后乱序:先对明文进行MD5,然后对加密得到的MD5串的字符进行乱序
总之宗旨就是:黑客就算攻破了数据库,也无法解密出正确的明文
MD5使用
+ (NSString *)md5String:(NSString *)str {
const char *value = [str UTF8String];
unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];
CC_MD5(value, (CC_LONG)strlen(value), outputBuffer);
NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){
[outputString appendFormat:@"%02x",outputBuffer[count]];
}
return outputString;
}
MD5加盐
NSString *salt = @"234567890-!@#$%^&*()_+QWERTYUIOP{ASDFGHJKL:XCVBNM<>";
[password stringByAppendingString:salt];
password = [password md5String];
NSLog(@"password2:%@", password);