iOS MD5加密 —— HERO博客

iOS SDK MD5加密算法,下面贴上代码:

#import <Foundation/Foundation.h>

@interface NSString (MD5)

//MD5加密
- (NSString *)MD5;

@end

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

@implementation NSString (MD5)

- (NSString *)MD5
{
    const char *str = [self UTF8String];
    
    unsigned char md5Buffer[CC_MD5_DIGEST_LENGTH];
    
    CC_MD5(str, (unsigned int)strlen(str), md5Buffer);
    
    NSMutableString *output = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH *2];
    for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
        [output appendFormat:@"%02x",md5Buffer[i]];
    }
    
    return output;
}

@end

实际使用时可以自由打乱,变成一个唯一的密钥,如下:

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    NSString *password = @"password";
    NSMutableString *str = [NSMutableString string];
    NSString *md5 = [password MD5];
    NSString *qian = [self suijiWithLength:2];
    NSString *hou = [self suijiWithLength:3];
    NSString *user = [[[str stringByAppendingString:qian] stringByAppendingString:md5] stringByAppendingString:hou];
    //user...
}

- (NSString *)suijiWithLength:(NSInteger)integer
{
    char data[integer];
    for (int x = 0; x < integer; data[x++] = (char)('A' + (arc4random_uniform(26))));
    return [[NSString alloc] initWithBytes:data length:integer encoding:NSUTF8StringEncoding];
}

简述一下开发中,前后端加密思路:

例子一,密码保护,假设用户登录需要手机账号及一段密码,登陆时我们将密码进行拼接(可用数据库的id或者手机号等用户唯一的标识),比如用户手机号为170 5555 6789,可以取前三位 170 + 用户输入的密码 + 后四位 6789拼接后再进行MD5加密处理发送给后台服务器,后台只需要保存MD5加密后的字符串即可,以后用户登录时也是比较这个MD5加密后的字符串。由于MD5的不可逆性,就算被拦截到也只会得到MD5加密的字符串,不会得到用户的密码。如图23-1。


列子二:资源保护,假设是一个仅会员可以访问的页面,连接中添加两个参数,设定为a、b。假设用户id:365,倒序字符串为563,随机生成4个数字插入,假设6789,插入后的结果即为a:6576839。将id号365进行MD5加密后前面拼接两位随机字符,假设af,后面拼接三位随机字符假设qwe,结果即为b:[af [365 MD5] qwe],传到后台服务器后,后台将a剔除插入数字,再倒序得到用户id号365,进行MD5加密,与b剔除前两位与后三位的字符进行比较,一致则可以访问,并可以根据id设置相关访问信息。如图23-2。


列子三:登录及资源保护,简单的加密处理很容易被暴力破解。可以在登录时除账号密码外再添加两个字段,如date和token两个字段,date为当前时间,token是类似于列子一中的公司秘钥,举个列子token = [[key + date] MD5],其中key为前端和服务器提前商议好的一个字符串, 这样服务器在拿到数据时进行同样加密处理后比对,一致则进行下一步验证账号密码,登录成功后再返回一个由服务器生成的秘钥,客户端收到后本地保存秘钥,之后所有请求客服端都将这个秘钥传回给服务器,由服务器比对,成功在返回数据。


写博客是希望大家共同交流成长,博主水平有限难免有偏颇不足之处,欢迎批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值