Flutter应用哈希用户凭据处理与Parse身份验证问题求解
HTTPS传输明文凭据的安全性
HTTPS协议本身会对整个请求负载做端到端的TLS加密,传输过程中第三方无法截获破解明文内容。只要你确认后端Parse服务启用了合法有效的SSL证书、没有禁用TLS加密传输,直接发送明文密码是符合行业通用安全标准的,包括谷歌、微软等厂商的公开身份认证API,默认都是走HTTPS传输明文凭据,不需要提前在客户端做哈希处理。
客户端哈希值每次重启变化的原因
你遇到的哈希输出每次重启变化的问题,本质是你用的哈希库默认启用了随机盐机制:每次计算哈希时会自动生成随机的盐值拼接在明文里再做哈希,保证同一个明文每次生成的哈希结果都不一样,这本来是抗彩虹表攻击的安全设计,但是你直接把这个动态哈希发给服务端,服务端存储的是固定的哈希值,自然校验不通过。
可选解决方案
- 方案1:直接走标准HTTPS传输明文密码(最推荐)
不需要在客户端做额外哈希处理,Parse服务端本身会对收到的密码自动做加盐哈希后和存储值做对比,本身符合安全规范,也不需要额外开发成本。 - 方案2:固定客户端哈希盐值
如果你确实要在客户端提前做哈希,可以把盐值硬编码在客户端代码里,每次计算哈希时都使用同一个固定盐,保证同一个明文每次生成的哈希结果一致,之后把这个固定哈希值当做密码传给Parse服务端,服务端存储的也是这个哈希值的二次加盐哈希即可。注意这个方案的安全性弱于方案1,一旦客户端代码被反编译拿到盐值,会降低哈希的安全性。 - 方案3:适配离线认证+在线认证双场景
如果你需要保留本地离线认证的逻辑,本地可以继续用默认带随机盐的哈希做本地校验,在线发起Parse登录请求时,单独把用户输入的明文密码走HTTPS传给服务端即可,两套逻辑互不干扰。
内容的提问来源于stack exchange,提问作者RobbB
相关产品推荐
相关产品推荐

