美文网首页
浅谈Hash

浅谈Hash

作者: Kare | 来源:发表于2018-12-09 16:10 被阅读1次

概述

散列函数:又称哈希函数散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。它使用128位,32个字符,16进制表示。(为什么是32个字符,因为在16进制中一个字符是0.5个字节,二进制是:128 / 8 = 16,那么十六进制就是:128 / 8 * 2 = 32)

特点

  • 不可逆性
  • 对于相同的数据,每次加密之后的结果是固定的
  • 算法是公开的
  • 用来做数据识别

常用的几种对称加密方式

  • DES(Data Encryption Standard): 它是使用56位的对称加密算法,因为位数太少,已经被人破译,所以被取而代之的是AES加密方式。
  • 3DES:使用3个密钥,对相同数据进行三次加密
  • AES(Advanced Encryption Standard): 高级加密标准,密钥长度分别是128,192,256位

密码加密方式

  • 直接是用MD5
    • 目前直接使用MD5传输已经不再安全了,因为简单的密码,会通过网站(https://www.cmd5.com)查出来
    比如在 Terminal 中加密密码:1q2w3e --> 对应的 MD5 是 3fde6bb0541387e4ebdadf7c2ff31123
    
    image

    一下就是在网站去查询的结果,所以MD5相对不再安全了。


    image
  • MD5 加盐(动态盐)
    • 直接使用 MD5 加密不行,我们可以加点佐料,让他变的复杂起来。
    pwd = (pwd + salt).MD5
    
    这样还是只能相对安全,如果获取到了你的 salt,那么还是会被破译。
    • 动态盐就是,从服务器派发的加密字符串(足够复杂的一个字符串),这样破译难道就加大了
  • HMAC 加密方法(重点阐述)
    • HMAC是啥:它是使用密匙,进行两次Hash(两次散列)
    • 开发过程中服务器分发这个 key, Client 保存在本地,后面请求就是用这个key。
      • 那么这个 key 在什么时候获取了,有两种情况:
        • 首次注册,发送给客户端
        • 新设备登录(登录成功后)
image

这个 Data 是服务器下发的时间戳,一般精确到分钟例如(201812091411)。客户端在回传时,给服务器。
那么服务器会是怎么处理了:

C --> 发送数据: pwd = (pwd + (hmac + salt) + date).md5
S --> 接受到数据:先校验date
例如:
服务器下发的是 201812091411, 客户端回传的时 201812091411,但是现在服务器时间是 201812091412,
那么时间对不上,该怎么办?此时服务器会减去一分钟(201812091411)再作对比,此时两个时间是相等的。
服务器就可以做接下来的处理,如果超过服务器限定的时间,就超时,让其重新请求。

数字签名

  • 概念:就是把数据的Hash值通过RSA加密,然后一起发送给服务器的形式。
  • 处理过程:客户端发送包(原始数据 + (原始数据的Hash + RSA)),服务器接收到后,先通过RSA解密,解出RSA加密的数据(原始数据的Hash),在求原始数据的Hash值,如果两个hash相等,那么就证明数据没有被篡改。
image

应用

应用模式

  • ECB(Electronic Code Book)
    • 电子密码本模式,每一块数据,独立加密 ,无初始化向量
  • CBC(Cipher Block Chaining)
    • 密码分组链接模式,使用一个密钥和一个初始化向量[IV]对数据执行加密
    • 可以有效保证密文的完整性,如果在传输数据时,一个数据块丢失或改变,后面的数据将无法正常解密

ECB

image
openssl enc -aes-128-ecb -K 616263 -nosalt -in msg.txt -out msg.bin
616263: 是key值是abc二进制代码

CBC

image
openssl enc -aes-256-cbc -iv 010203040506 -K 616263 -nosalt -in msg.txt -out msg.bin
iv: 是初始化向量,例如:时钟的9点钟方向等

相关文章

  • 浅谈Hash

    Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输...

  • 浅谈Hash

    Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输...

  • 浅谈Hash

    概述 散列函数:又称哈希函数,散列算法,是一种从任何一种数据中创建小的数字“指纹”的方法。它使用128位,32个字...

  • 2018-03-19 hash trick

    hash trick在机器学习中的使用特征哈希干货 | 自然语言处理(2)之浅谈向量化与Hash-Trick

  • 2018-08-27

    浅谈数据结构中Hash Hash在中文中有时被称作“散列”,也有时直接叫“哈希”。 基本概念:给定一个值(Key)...

  • Boolan(博览网)——STL与泛型编程(第十周)

    目录 1. 一个万用的 Hash Function 2. tuple(元组)浅谈 3. type traits 深...

  • 安防之浅谈Hash

    Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入通过散列算法变换成固定长度的输出,该输...

  • 浅谈HashMap中的hash算法

    HashMap是我们常见的一种数据结构,实现Map接口,用来存储键值对,允许null键/值、非同步、不保证有序(比...

  • 浅谈Java中的hashcode方法

    浅谈Java中的hashcode方法 哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来...

  • Golang标准库——hash

    hash hash包提供hash函数的接口。 type Hash Hash是一个被所有hash函数实现的公共接口。...

网友评论

      本文标题:浅谈Hash

      本文链接:https://www.haomeiwen.com/subject/aeckhqtx.html