1MD5
MD5:全称Message-Digest Algorithm 5,是一种不可逆的摘要算法,没有公钥私钥一说,通常用于验证,MD5的算法是一致的,输入两个字符串比较最后得出的16位的16进制字符串。MD5加密可以在线被破解:解密地址,可以通过加盐来增加数据的安全性
2 用法
1、 当字符串有"\0"空格的转义字符字符串的方法有问题,相当于是\0之前的字符串
+(NSString *)MD5:(NSString *)str
{
NSMutableString *md5Str = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
const char *md5Char = [str UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(md5Char, (CC_LONG)strlen(md5Char), result);
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[md5Str appendFormat:@"%02x",result[i]];
}
return md5Str;
}
2、 32字节的小写MD5加密
+ (NSString *)MD5Data:(NSData *)data
{
NSMutableString *md5Str = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
const char *md5Char = [data bytes];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(md5Char, (CC_LONG)data.length, result);
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[md5Str appendFormat:@"%02x",result[i]];
}
return md5Str;
}
3、 32字节的大写MD5加密
+ (NSString *)MD5DataUpper:(NSData *)data
{
NSMutableString *md5Str = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
const char *md5Char = [data bytes];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(md5Char, (CC_LONG)data.length, result);
for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
[md5Str appendFormat:@"%02X",result[i]];
}
return md5Str;
}
4、16字节的小写MD5加密
+ (NSString *)MD5ForLower16Byte:(NSData *)data
{
NSString *md5Str;
NSString *byteStr32 = [self MD5Data:data];
for (int i = 0; i < 24; i++) {
md5Str = [byteStr32 substringWithRange:NSMakeRange(8, 16)];
}
return md5Str;
}
5、16字节的大写MD5加密
+ (NSString *)MD5ForUpper16Byte:(NSData *)data
{
NSString *md5Str;
NSString *byteStr32 = [self MD5DataUpper:data];
for (int i = 0; i < 24; i++) {
md5Str = [byteStr32 substringWithRange:NSMakeRange(8, 16)];
}
return md5Str;
}
3加盐
MD5加密后的字符串是不可逆的,不能解密,理论上是安全的,但是网上有彩虹表(存储大量弱密码和弱密码MD5加密后的字符串)用于碰撞适配我们MD5加密后的字符串,如果找到相同的MD5字符串就可以逆向得知我们的密码,所以将我们的密码 拼接 更加复杂的字符串,在彩虹表中难以找到相同的MD5字符串,这个过程就是加盐。
SHA1的加密流程和MD5类似,可以参考下SHA1加密
demo地址:GitHub地址
参考资料:https://www.jianshu.com/p/89154c0c213c
https://www.jianshu.com/p/02a2946d4e97
https://www.jianshu.com/p/70ee2212f7f1
网友评论