MD5 (摘要加密)
MD5
约定
- 同样的密码,同样的加密算法,每次加密的结果是不一样
密码方案
- 方案一:直接 MD5
pwd = pwd.md5String;
非常不安全
- 方案二 MD5 + 盐
pwd = [pwd stringByAppendingString:salt].md5String;
盐值要够咸,可以从服务器获取
- 安全方案三 - HMAC
pwd = [pwd hmacMD5StringWithKey:@"heello world"];
相对之前的方案,安全级别要高很多,使用 heello world 对 pwd 进行加密,然后在进行 md5,然后再次加密,再次 md5
- 安全方案四 - 时间戳密码
- (NSString *)timePassword {
// 1. 生成key
NSString *key = @"heello world".md5String;
NSLog(@"HMAC Key - %@", key);
// 2. 对密码进行 hmac 加密
NSString *pwd = [self.pwd hmacMD5StringWithKey:key];
// 3. 获取当前系统时间
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
fmt.locale = [NSLocale localeWithLocaleIdentifier:@"zh"];
fmt.dateFormat = @"yyyy-MM-dd HH:mm";
NSString *dateStr = [fmt stringFromDate:[NSDate date]];
NSLog(@"%@", dateStr);
// 4. 将系统时间拼接在第一次加密密码的末尾
pwd = [pwd stringByAppendingString:dateStr];
// 5. 返回拼接结果的再次 hmac
return [pwd hmacMD5StringWithKey:key];
}
密码时效大约两分钟,需要服务器脚本支持,安全级别高,不过客户端的时间与服务器的时间不同步
- 安全方案五 - 服务器时间戳密码
/// 生成时间戳密码
- (NSString *)timePassword:(NSString *)pwd {
// 1. 以 heello world.md5 作为 hmac key
NSString *key = @"heello world".md5String;
NSLog(@"HMAC KEY - %@", key);
// 2. 对密码进行 hamc
NSString *pwd = [self.pwd hmacMD5StringWithKey:key];
// 3. 取服务器时间
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost/hmackey.php"]];
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSString *dateStr = dict[@"key"];
// 4. 拼接时间字符串
pwd = [pwd stringByAppendingString:dateStr];
// 5. 再次 hmac 散列密码
return [pwd hmacMD5StringWithKey:key];
}
/*
NSString *JpgPath = [[NSBundle mainBundle] pathForResource:@"MD5" ofType:@"jpg"];
NSData *data = [NSData dataWithContentsOfFile:JpgPath];
unsigned char result2[CC_MD5_DIGEST_LENGTH];
CC_MD5(data.bytes, (CC_LONG)data.length, result2);
NSMutableString *strr = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
[strr appendFormat:@"%02x",result2[i]];
}
NSLog(@"%@-------",strr);
//// pwd
#import <CommonCrypto/CommonCrypto.h>
@implementation NSString (md5Sting)
- (instancetype) MD5String {
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5([self UTF8String], CC_MD5_DIGEST_LENGTH, result);
CC_MD5([self UTF8String], (CC_LONG)self.length, result);
NSMutableString *target = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
[target appendFormat:@"%02x",result[i]];
}
return target.copy;
}
*/
// 准备明文
NSString *OCString = @"hello world !";
unsigned char OCResult[CC_MD5_DIGEST_LENGTH];
// 加密
CC_MD5([OCString UTF8String], (CC_LONG)OCString.length, OCResult);
// 获取密文
NSMutableString *targetString = [[NSMutableString alloc]initWithCapacity:CC_MD5_DIGEST_LENGTH];
// 将加密的结果的数组内容以16进制的数拼接
for (int i = 0; i<CC_MD5_DIGEST_LENGTH; i++) {
[targetString appendFormat:@"%02X",OCResult[i]];
}
NSLog(@"====%@====",targetString);
MD5 (摘要加密)的更多相关文章
- 信息加密之信息摘要加密MD2、MD4、MD5
对于用户数据的保密一直是各个互联网企业头疼的事,那如何防止用户的个人信息泄露呢?今天为大家介绍一种最简单的加密方式--信息摘要算法MD.它如何来保护用户的个人信息呢?其实很简单,当获得到用户的信息后, ...
- java中使用MD5进行加密 BASE64Encoder 编码
原文地址:http://www.cnblogs.com/weiwangnuanyang/articles/4326336.html java中使用MD5进行加密 在各种应用系统的开发中,经常需 ...
- Java对字符串使用MD5进行加密(亲测有效)
转自:https://blog.csdn.net/jay314159/article/details/4918358 前言: MD5即Message-Digest Algorithm 5(信息-摘要算 ...
- java中使用MD5进行加密
java中使用MD5进行加密 在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希 ...
- iOS中的MD5(base64)加密
MD5(base64)是一种结合MD5摘要和base64编码的密文处理方式,加密后的结果为24位字符串,且后两位为==,例如:1的加密结果为xMpCOKC5I4INzFCab3WEmw==. 下面是加 ...
- MD5,BASE64Encoder加密
package com.cn.peitest; import java.io.UnsupportedEncodingException; import java.security.MessageDig ...
- java实现MD5文件加密
package me.zhengjie.modules.logdump.util; import java.io.FileInputStream; import java.io.IOException ...
- 将32位MD5摘要串转换为128位二进制字符串
将32为MD5摘要串转换为128位二进制字符串: /// <summary> /// 将字符串转成二进制 /// </summary> /// <param name=& ...
- JS分段上传文件(File)并使用MD5.js加密文件段用来后台校验
HTML <form method="POST" name="form1" action="/mupload/upload/" enc ...
随机推荐
- Spark MLib 数据类型
1. MLlib Apache Spark's scalable machine learning library, with APIs in Java, Scala and Python. 2. ...
- 【poj2459】 Feed Accounting
http://poj.org/problem?id=2459 (题目链接) 题意 一堆不知何时运到的草料原有F1 kg,在第D天被牛吃成F2 kg,每头牛在[l,r]吃草料,每天吃1kg.求草料是什么 ...
- 关于gcd的几个问题
这两天刷了几个关于gcd的很类似的问题,总结一下: BZOJ2818 1<=x<=n,1<=y<=n,求满足gcd(x,y)=质数的个数 BZOJ2190 1<=x< ...
- ecshop /includes/init.php Arbitrary User Login Vul
catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对用户输入的cookie,判断免登的逻辑中存在漏洞,导致黑客可以直接通过 ...
- Linux Process Management && Process Scheduling Principle
目录 . 引言 . 进程优先级 . 进程的生命周 . 进程表示 . 进程管理相关的系统调用 . 进程调度 . 完全公平调度类 . 实时调度类 . 调度器增强 . 小结 1. 引言 在多处理器系统中,可 ...
- 使用convert来批量处理图片
这是个神奇的工具,居然使用命令行就可以这么方便的处理图片.功能有待挖掘. 这个是把图片批量进行 resize 的脚本. #!/bin/sh counter= root=mypict resolutio ...
- Swift 用Delegate和Block实现回调的Demo
一.有关回调 我们知道,执行函数的时候,一般都有return作为返回参数了,那有return了为什么还要回调呢? 回调是为了实现异步的返回,在某些特殊的情况下,比如你执行的函数是一个长时间运行的函数, ...
- Beta Daily Scrum 第五天
[目录] 1.任务进度 2.困难及解决 3.燃尽图 4.代码check-in 5.总结 1. 任务进度 学号 今日完成 明日完成 612 完成分享成就到朋友圈,查看当天成就 我的任务完成啦 615 写 ...
- java学习总结
1 获得项目绝对路径 String path = request.getContextPath(); String basePath = request.getScheme() + ":// ...
- 【转载】C++中的基类与派生类
转自:http://www.cnblogs.com/sujz/articles/2044365.html 派生类的继承方式总结: 继承方式 说明 public 基类的public和protected的 ...