Base64+动态密码生成

加密方式二Base64
//字符串编码
-(NSString )base64EncodeString:(NSString )string{
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
//对二级制数据进行64编码
NSString *base64 = [data base64EncodedStringWithOptions:0];

return base64;

}
//字符串解码
-(NSString )base64DecodeString:(NSString )string{

NSData *data = [[NSData alloc]initWithBase64EncodedString:string options:0];
return [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];

}
//图片编码
-(NSString )base64EncodeImage:(UIImage )image{

NSData *data = UIImageJPEGRepresentation(image, 1.0f);
NSString *encodeImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

return encodeImageStr;

}
//图片解码
-(UIImage )base64DecodeImageStr:(NSString )imagestr{
NSData *data = [[NSData alloc]initWithBase64EncodedString:imagestr options:NSDataBase64DecodingIgnoreUnknownCharacters];
UIImage *image = [UIImage imageWithData:data];
return image;
}

加密方式 动态密码生成
我们在登录一个手机app时,每次输入的账户密码都是固定的。但是这样呢如果通过网络请求发送时,容易被拦截获取到账号密码。其中有一种加密的方式,就是使用动态的密码进行登录。这样保密性会高很多。动态密码,实际上是先将普通密码加密再加上一段会变化的数据(比如时间)再进行一次加密。这样我们每次获得的密码部分都是不同的。这就是动态密码的大概含义——理解の。
服务器和客户端必须以相同的加密方式加密。
服务器时间和客户端的时间必须一致。
因为我们发送网络请求时,需要一点时间。可能会造成我们发送请求的时间与服务器接收到的时间发生时间差的情况。所以一段服务器端会计算两次(当前时间和一分钟后时间)这样我们调用接口时,会和他们进行判断,有一个正确,就认为账号密码正确——登录成功。
备注:一分钟密码变化一次所以测试的时候请看时间
//加密前的密码
NSString *password = @”123456789”;
// 3、取出当前的时间,将当前时间拼接在第一次机密的密码后面
NSDate *date = [NSDate date];

// 对当前时间做格式化处理.
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
//由于和服务器通讯有时间间隔所以我们只要取到分钟
[formatter setDateFormat:@"yyyy-MM-dd HH:mm"];
NSString *timer = [formatter stringFromDate:date];
NSLog(@"%@",timer);
//对密码第一次64编码
NSString *baseFirstStr = [self base64EncodeString:password];
//将编码后的字符串反转
 password = [self reverseStr:baseFirstStr];
NSLog(@"%@",password);
//将反转过后的字符串后面拼接时间
password = [password stringByAppendingString:timer];
NSLog(@"反转过后拼接字符串的%@",password);
//对拼接过的密码第二次编码
NSString *baseTwoStr = [self base64EncodeString:password];
NSLog(@"%@",baseTwoStr);

//验证方式:当当前分钟2次的字符串是相同的,下一分钟就字符串就会变 这是标准的时间戳加密方式每个公司都有一套自己的加密方式,我们公司就是用的这种
// NWd6TjJVRE56SVRNMjAxOC0wMi0xMiAxNjo0OQ== 解密:先base64解码然后去掉时间戳,然后反转字符串最后再一次base64解码
NSString *decodeStr = [self DecodePassword:baseTwoStr toTime:timer];
NSLog(@”逆向检验密码是否一样%@”,decodeStr);

}

//字符串反转
-(NSString )reverseStr:(NSString )str{

NSMutableString *reverStr = [NSMutableString string];



for (NSInteger i = 0; i<str.length; i++)
{
    unichar temp = [str characterAtIndex:str.length-i-1];
    [reverStr appendFormat:@"%c",
     temp];
}

return reverStr;

}
//检验加密是否匹配
-(NSString )DecodePassword:(NSString )str toTime:(NSString *)timer{

NSString *decodeStr = [self base64DecodeString:str];
// NSLog(@”%@”,DbaseTwoStr);
//去除字符串
decodeStr = [decodeStr stringByReplacingOccurrencesOfString:timer withString:@”“];

//反转
decodeStr = [self reverseStr:decodeStr];
//解码

decodeStr = [self base64DecodeString:decodeStr];
return decodeStr;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值