常用SHA算法以及前后端鉴权方式

114 阅读3分钟

HASH算法(Hash Algorithm)

参考文章:傻傻分不清之 Cookie、Session、Token、JWT

特点:

  • 正像快速:原始数据可以快速计算出哈希值
  • 逆向困难:通过哈希值基本不可能推导出原始数据
  • 输入敏感:原始数据只要有一点变动,得到的哈希值差别很大
  • 冲突避免:不同的输入几乎不可能产生相同的输出(尽管理论上存在碰撞的可能性,但在实际应用中极为罕见)

SHA家族

image.png

注意

  • 永远使用 哈希算法 来处理密码,绝不要使用 Base64 或其他编码方式来存储密码,这和以明文存储密码是一样的,使用哈希,而不要使用编码。编码以及加密,都是双向的过程,而密码是保密的,应该只被它的所有者知道, 这个过程必须是单向的。哈希正是用于做这个的,从来没有解哈希这种说法, 但是编码就存在解码,加密就存在解密。
  • 绝不要使用弱哈希或已被破解的哈希算法,像 MD5 或 SHA1 ,只使用强密码哈希算法。

JWT

了解

特点

* SON Web Token(简称 JWT)是目前最流行的跨域认证解决方案。
* 更安全,由服务端按指定规则生成,也只能由服务端解密
* 无状态,可用于分布式架构,可解决高并发场景下服务器资源占用过大的问题
* 可以避免 CSRF 攻击(因为不需要 cookie 了)
* 移动端常用的是 token,因为移动端对 cookie 的支持不是很好

探讨

  • Token的可逆性取决于其生成和存储的具体方式。一般来说,Token本身是一个通过特定算法生成的字符串,用于在客户端和服务器之间安全地传递信息,而不需要每次都发送敏感信息(如用户密码)。

  • 不可逆Token:
    在大多数情况下,Token是通过不可逆加密算法(如SHA-256、MD5等)生成的。这意味着一旦Token被生成,就无法通过反向操作恢复其原始数据。这种Token通常用于身份验证和会话管理,以确保数据的安全性。
    例如,JWT(JSON Web Tokens)就是一种常用的Token类型,它由头部(Header)、负载(Payload)和签名(Signature)三部分组成,并通过密钥进行签名以确保其完整性和真实性。JWT一旦生成,其内部的数据(如用户信息)就无法被逆向解密。

  • 可逆Token: 然而,也存在一些可逆的Token生成方式,尽管这在安全性方面通常不是首选。在这些情况下,Token可能通过可逆加密算法(如AES加密)生成,并且服务器会存储解密所需的密钥。这样,服务器就可以在需要时解密Token以获取其中的信息。
    但请注意,使用可逆Token需要特别小心,因为一旦解密密钥泄露,Token中的敏感信息也将面临风险。

  • Token的验证:

    • 对于不可逆Token(如JWT),验证过程通常涉及解码Token的各个部分,并使用密钥验证签名的有效性。如果签名有效,服务器将信任Token中的数据。
    • 对于可逆Token,验证过程可能涉及解密Token以获取其中的信息,并根据需要进行进一步的处理和验证。
  • 综上所述,Token的可逆性取决于其生成和存储的具体方式。在大多数情况下,为了安全起见,建议使用不可逆Token(如JWT)进行身份验证和会话管理。如果确实需要使用可逆Token,请确保采取适当的安全措施来保护解密密钥和Token中的敏感信息。