加密之 MD5

  • 同样的密码,同样的加密算法,每次加密的结果是不一样

密码方案

  • 方案一:直接 MD5
pwd = pwd.md5String;该方法不安全
  • 方案二 MD5 + 盐
pwd = [pwd stringByAppendingString:salt].md5String;
  • 安全方案三 - HMAC
pwd = [pwd hmacMD5StringWithKey:@"itheima"];

相对之前的方案,安全级别要高很多,使用 itheima 对 pwd 进行加密,然后在进行 md5,然后再次加密,再次 md5
  • 安全方案四 - 时间戳密码
- (NSString *)timePassword {
    // 1. 生成key
    NSString *key = @"itheima".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. 以 itheima.md5 作为 hmac key
    NSString *key = @"itheima".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];
}
时间: 2024-11-05 01:17:46

加密之 MD5的相关文章

lazarus:将字符串加密生成md5码

var sSrc, sDst: string; begin sSrc := EditSrc.Text; sDst := MD5Print(MD5String(sSrc)); EditDest.Text := sDst; lazarus:将字符串加密生成md5码,布布扣,bubuko.com

iOS HmacSHA1加密 和 MD5 Base64加密 --iOS开发系列---项目中成长的知识五

项目中开发中需要对一些数据进行加密后和服务器验证是否是我们客户端发出的请求! 方案是服务器定的,使用HmacSHA1加密和MD5 Base64加密 加密过程比较复杂 1.获取格林威治时间 2.用base64编码对请求数据内容进行MD5值计算 3.设置请求格式 4.设置鉴权信息,需要对上面的3个内容以及请求的链接 进行HMacSHA1再次进行加密 加密过后把上面4步获得的值加入到http的请求头中,一并发送给服务器,服务器经过验证后,才返回给我们我们想要的信息 下面贴代码说明我们使用的两个加密 首

C#加密方法汇总(SHA1加密字符串,MD5加密字符串,可逆加密等)

using System;using System.Collections.Generic;using System.Text; namespace StringEncry{ class EncodeAndDecode { /// <summary> /// Base64加密 /// </summary> /// <param name="codeName">加密采用的编码方式</param> /// <param name=&qu

.NET下的两种加密方式MD5和DEC

md5加密 /// <summary>    /// MD5加密    /// </summary>    /// <param name="toCryString">要加密的字符串</param>    /// <returns></returns>    public static string GetMD5Str(string toCryString)    {        MD5CryptoService

iOS经常使用加密方式(MD5,AES,BASE64)与网络数据安全

演示样例项目下载地址  https://github.com/cerastes/Encryption 1MD5 创建MD5类 #import <Foundation/Foundation.h> @interface CJMD5 : NSObject +(NSString *)md5HexDigest:(NSString *)input; @end #import "CJMD5.h" #import <CommonCrypto/CommonDigest.h> @i

python 中md5 和 sha1 加密, md5 + os.urandom 生成全局唯一ID

首先先来介绍一下md5 和 sha1 的概念 MD5 MD5的全称是Message-Digest Algorithm 5(信息-摘要算法).128位长度.目前MD5是一种不可逆算法. 具有很高的安全性.它对应任何字符串都可以加密成一段唯一的固定长度的代码. SHA1 SHA1的全称是Secure Hash Algorithm(安全哈希算法) .SHA1基于MD5,加密后的数据长度更长, 它对长度小于264的输入,产生长度为160bit的散列值.比MD5多32位. 因此,比MD5更加安全,但SHA

JavaWeb加密解密——md5

主要内容:前台js加密 + 后台java解密 一.前台js加密:  将要发送给后台的信息在js里进行md5加密,得到密钥,然后将信息和密钥一起发送给后台. 1.引入md5的js框架,即md5.js文件,如下: /** * MD5 for JavaScript. (32bit) * @ interface:  MD5("Input String") * @ return: key for Input String **/ var MD5 = function (string) { fun

iOS 加密 : MD5

MD5:首先,md5不是加密. md5是摘要算法,主要是用来做认证,利用自身优势(不可逆.低碰撞率)解决公开网络中交换密钥.认证的问题, MD5相当于超损压缩,在计算过程中原文的部分信息会丢失. MD5为什么不可逆?例子: 原文:快点赞啊亲加密规则:每个字取拼音声调+笔画数,最后的结果计算乘积,为了也使得我的结果始终保持在一个限定范围内,取最后结果取其与2^14=16384的余数(随便取的,你们就当我有二进制强迫症吧)如 快 是7画,4声,也就是“特征值11”,以此类推 点9+3=12 赞16+

MD5和sha1加密算法--散列加密技术 MD5:128bit的大整数

在很多电子商务和社区应用中,我们都要存放很多的客户的资料,其中包括了很多的隐私信息和客户不愿被别人看到的信息,当然好有客户执行各种操作的密码,此时就需要对客户的信息进行加密再存储,目前有两种比较好的加密算法:MD5和sha1. 这两种加密算法都属于散列加密技术.所谓散列加密就是无论输入的字符串是什么,有多大,加密后都将变成唯一的定长的加密串. 首先介绍一下MD5,MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Secu