写点什么

架构师训练营第十一周 - 作业

用户头像
Eric
关注
发布于: 2020 年 08 月 15 日
架构师训练营第十一周 - 作业

请用你熟悉的编程语言写一个用户密码验证函数,Boolean checkPW(String 用户 ID,String 密码明文,String 密码密文)返回密码是否正确 boolean 值,密码加密算法使用你认为合适的加密算法。



Clojure 代码 https://github.com/gzeureka/check-password

(ns check-password.core
(:gen-class)
(:require [buddy.core.hash :as hash]
[buddy.core.codecs :as codecs]
)
)

(defn sha3-512 [s]
(codecs/bytes->hex (hash/sha3-512 s)))

(defn get-salt-by-user-id [user-id]
; 注意:实际应用中,保存密码时,应该为每个 user 保存不同的 salt
; 验证密码时,根据 user-id 从 DB 中获取 salt
"5q3yhCdSDMj9Za9jJE0vhfExlTV8JeSe6XnfblAFkPY"
)

(defn check-pw [user-id password ciphertext]
; password 是用户输入的密码明文,ciphertext 是 DB 中保存的密文
; 对密码明文和 salt 进行散列,与 DB 中保存的密文进行对比
(= (sha3-512 (str (get-salt-by-user-id user-id) password)) ciphertext)
)



用户头像

Eric

关注

给写代码的人写代码 2017.10.17 加入

Clojure

评论

发布
暂无评论
架构师训练营第十一周 - 作业