原理:用一个密钥给密码加密,并经过两次散列,密钥来源于服务器,并且是一个账号对应一个密钥.

  • 流程

    1.客户端注册账号,将账号发送给服务器,服务器收到账号,判断未注册时,返回给客户端一个密钥(该密钥与该账号唯一对应),客户端首先保存该密钥到本地,然后使用该密钥给自己的密码HMAC加密,并把加密后的HMAC的HASH值发送给服务器,服务器保存加密后的密码,注册成功!
    2.再次登陆时,我们把用密钥加密的密码在发送给服务器,服务器拿当前发送给他的这个加密密码和自己保存的数据对比,如果对比成功,那就登陆成功!
    3.如果我们换了其他手机登陆,此时我们是无法登陆成功的,因为本地没有服务器返回的密钥,那么此时,我们同样需要向服务器申请密钥,此时是不是有点像客户端授权登录!当我们使用新的客户端登录时,向服务器发起申请登陆,此时服务器不会直接返回密钥给我们,而是去询问先前登陆的设备是否可以授权个此时登陆的设备登陆,如果授权登陆,那么服务器就返回密钥并登陆成功,否则无法登陆!

    使用以上流程,我们的密码已经算是很安全了,很难被窃取.就算是被窃取了,我们的顺势范围是很小的,因为密钥是唯一对应账号的.

我们说,加密只有更安全,没有绝对的安全,那么上面的加密过程是不是还是存在一些缺陷呢?

  • 缺陷:我们登陆时,发送给服务器的是加密后的一个HASH值,那么,如果有人窃取了你的这个登陆使用的HASH值,并且使用它模拟登陆请求,是不是就可以登陆完成了呢?答案是可以的!
  • 解决:发送时,我们发送:(客户端使用HMAC的HASH值+201907221442).md5后的HASH值(201907221442:2019年07月22日14时22分,精确到分钟的一个值),服务端收到后,会用对应的密钥,通过相同的加密方式(使用的时间戳是服务器对应的当前的时间),得到一个HASH值,与收到的HASH值对比,如果比对不成功,服务器会立即使用密钥,通过相同加密方式(使用上一分钟的时间戳),在得到一个HASH值,再与收到的HASH值比对,成功即可登录!这样,保证了我们发送密码的这个有效时间最大是1分59秒,在这个时间段了,我们发送的这个HASH值是有效的!这样大大提高了用户账号的安全性!

iOS登陆密码加密-HMAC相关推荐

  1. iOS 注册密码加密 添加了时间戳 遇到的问题...

    今天项目 遇到一个事故,我本想用 一个形容这个事故的adj  算了 既然 叫事故 已经能表达我们处于的一种状态, 是这样的: 有小部分用户反应 app无法注册 总提示密码错误的情况 实际 该步骤 已经 ...

  2. java登陆密码加密怎么做,Java如何实现密码加密

    在查询时,我们如果要对用户的登录信息进行加密,通常会将其密码进行加密. 1) 可以借助spring框架工具类DigestUtils 2) 也可以使用shiro框架来实现 以上就是两者方式分别使用, 注 ...

  3. QQ网页登陆密码加密方式(农场、空间、WebQQ等通用)

    有很多想写农场的助手工具,同之前的我一样.但是又不知道怎么处理QQ的登陆问题,用别人的又不怎么放心,所以就想自己动手.但是很多没基础的又不知道怎么下手.所以-- 现在我就把密码的加密方式写出来,方便大 ...

  4. QQ网页登陆密码加密方式农场、空间、WebQQ等通用

    有很多想写农场的助手工具,同之前的我一样.但是又不知道怎么处理QQ的登陆问题,用别人的又不怎么放心,所以就想自己动手.但是很多没基础的又不知道怎么下手.所以--  现在我就把密码的加密方式写出来,方便 ...

  5. QQ网页登陆密码加密方式(农场、空间、WebQQ等通用)(网摘)

    有很多想写农场的助手工具,同之前的我一样.但是又不知道怎么处理QQ的登陆问题,用别人的又不怎么放心,所以就想自己动手.但是很多没基础的又不知道怎么下手.所以--  现在我就把密码的加密方式写出来,方便 ...

  6. php网站后台密码加密,thinkphp 后台登陆密码加密传入密钥

    /** * 对用户的密码进行加密 * @param $password * @param $encrypt //传入加密串,在修改密码时做认证 * @return array/password */ ...

  7. CAS单点登陆密码加密处理

    在当前的网络环境下,使用未加密的密码进行储存,极易遭受破解.所以在现在的开发中,所有注重安全的网站都会进行哈希算法加密处理,常用的哈希算法由MD5加密或SHA1加密处理,本文采用MD5进行演示,有兴趣 ...

  8. java中用户登陆密码加密方法

    /** * 生成安全的密码,生成随机的16位salt并经过1024次 sha-1 hash */ public static String entryptPassword(String plainPa ...

  9. Python爬虫-中华英才网登陆JS加密登陆

    声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 0x00 抓包分析 1.参数分析 参数 数据来源 password 登陆密码加密参数 callback 固定 finger ...

最新文章

  1. 机器学习-第六章 支持向量机(SVM)
  2. QT的QSortFilterProxyModel类的使用
  3. MongoDB基础命令
  4. halcon模板匹配测试流程
  5. LeetCode 1271. 十六进制魔术数字(进制转换)
  6. JAVA NIO基础知识
  7. linux中的设备名称和设备号,linux中的设备名称和设备号
  8. linux测试有效组,软件测试:三分钟掌握Linux命令之用户用户组命令(必读系列三)...
  9. android 33 对话框控件
  10. SRAM6264(8K*8)
  11. linux配置路径,Linux下配置搜索路径
  12. 经典五笔(五笔输入法)
  13. 【Linux】Linux Ext2文件系统
  14. 425 Failed to establish connection解决方案
  15. Ubuntu设置Root用户开机启动
  16. It seems like the kubelet isn‘t running or healthy
  17. Win10系统如何在右键菜单添加管理员取得所有权
  18. Qt程序在arm板上运行
  19. Windows 7 x64 SP1 安装 Windows Edge 浏览器
  20. 2020年iOS 和Android程序员请开始修炼内功

热门文章

  1. python遥控汽车玩具_[详细实例]MicroPython拼插编程实战:DIY一台会思考的壁障车...
  2. Unicode双向算法详解(bidi算法)(一)
  3. 为何敢称万物追焦?小米12 系列CyberFocus技术详解
  4. 五大车载操作(VOS)系统优劣对比,车载系统架构分析-QNX系统性能分析
  5. B站成长期UP主有哪些涨粉机会?
  6. http://blog.csdn.net/wrp920227/article/details/54588238
  7. ASFF的TensorFlow2实现
  8. 企业产品品牌如何打造?招商加盟数字化怎么做?
  9. 2019亚信科技java实习面试笔试经验分享(已成功入职)
  10. 关于 android 远程控制(pc 控制手机)