关于MD5记录

项目中有用到md5加密,其实也是在从后台那数据的时候,加一个时间戳的参数

简单说明:
MD5:全称是Message Digest Algorithm 5,译为“消息摘要算法第5版”
效果:对输入信息生成唯一的128位散列值(32个字符)
MD5生成的是固定的128bit,即128个0和1的二进制位,而在实际应用开发中,通常是以16进制输出的,所以正好就是32位的16进制,说白了也就是32个16进制的数字。

MD5特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

5.输入两个不同的明文不会得到相同的输出值
6.根据输出值,不能得到原始的明文,即其过程不可逆(只能加密, 不能解密)

事先介绍一个概念,因为下边有用到👇
加盐:所谓加盐, 就是在原本需要加密的信息基础上,糅入其它内容salt。

注意点:
1.一定要和后台开发人员约定好,MD5加密的位数是16位还是32位(大多数都是32位的),16位的可以通过32位的转换得到
2.MD5加密区分 大小写,使用时要和后台约定好

直接上代码,方便以后参考
写一个NSString+MD5的分类
.h文件

/@interface NSString (MD5)

#pragma mark - 加密的位数为32位
/** 直接加密 */
- (NSString *)MD5_32BIT;
/** 加盐 */
- (NSString *)MD5_saltStr:(NSString *)saltStr;
/** 多次加密 */
- (NSString *)MD5_againStr:(NSString *)againStr;
/** 乱序加密 */
- (NSString *)MD5_Chaos:(NSString *)chaosStr;

#pragma mark - 加密的位数为16位

/** 直接加密 */
- (NSString *)MD5_16BIT;


@end

.m文件

//
//  NSString+MD5.m
//  MD5加密
//
//  Created by Edison.3 on 17/4/11.
//  Copyright © 2017年 Edison.3. All rights reserved.
//

#import "NSString+MD5.h"
#import <CommonCrypto/CommonDigest.h>

#define salt @"addStringYouWant"

@implementation NSString (MD5)

#pragma mar- 32位
// 直接加密
- (NSString *)MD5_32BIT {
    
    const char *cStr = [self UTF8String];
    
    unsigned char digest[CC_MD5_DIGEST_LENGTH];
    
    CC_MD5( cStr, (CC_LONG)self.length, 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;
}

// 加盐
- (NSString *)MD5_saltStr:(NSString *)saltStr {
    
    saltStr = [saltStr stringByAppendingString:salt];
    
    NSString *result =[saltStr MD5_32BIT];
    
    return result;
}

// 多次加密
- (NSString *)MD5_againStr:(NSString *)againStr {
    
    NSString *result = [againStr MD5_32BIT];
    
    result = [result MD5_32BIT];
    
    return result;
}

// 乱序加密
- (NSString *)MD5_Chaos:(NSString *)chaosStr {
    
    NSString *result =[chaosStr MD5_32BIT];
    
    NSString *header =[result substringFromIndex:2];
    
    NSString *footer=[result substringFromIndex:2];
    
    result =[footer stringByAppendingString:header];
    
    return result;
    
}


#pragma mark -  16位
- (NSString *)MD5_16BIT{

    NSString * md5Str = [self MD5_32BIT];
    NSString  *string;
    for (int i=0; i<24; i++) {
        string=[md5Str substringWithRange:NSMakeRange(8, 16)];
    }
    return string;
}

@end

调用

   NSString *string = @"明天,就在前方";
    // 调用 MD5 加密并打印结果
    NSLog(@"MD5Result       = %@", [string MD5_32BIT]);
    NSLog(@"MD5_saltResult  = %@", [string MD5_saltStr:string]);
    NSLog(@"MD5_againResult = %@", [string MD5_againStr:string]);
    NSLog(@"chaosResult     = %@", [string MD5_Chaos:string]);

大家应该都知道有一个MD5破解网站,名字叫做 md5在线解密加密,因此我们在使用MD5加密的时候,最好使用多次加密,加盐,乱序加密等,不然会很容易被破解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文主要介绍移动端的加解密算法的分类、其优缺点特性及应用,帮助读者由浅入深地了解和选择加解密算法。文中会包含算法的...
    苹果粉阅读 13,959评论 5 29
  • 这篇文章主要讲述在Mobile BI(移动商务智能)开发过程中,在网络通信、数据存储、登录验证这几个方面涉及的加密...
    雨_树阅读 7,915评论 0 6
  • 1. 几分钟前,我刚刚好被门禁拦在宿舍外,门内的张叔朝我摆了摆手,“小崽子,不能再惯着你了,去网吧凑合一宿吧,以后...
    小楼西的帐篷阅读 3,669评论 0 0
  • 早上起晚了,孩子也跟着睡成了小猪。急急忙忙地出门,孩子因为有起床气,也就闹得很不愉快,当听到她说奶奶在她面前说我的...
    piano潘潘阅读 1,696评论 0 1