Golang实现Python Django2密码算法pbkdf2_sha256
0. 说明
系统环境
go version go1.14.3 darwin/amd64
因为项目需要从Python Django
框架重构为Golang
项目,为了保证用户数据不丢失,所以密码算法使用与Django框架相同的pbkdf2_sha256
加密算法。
以下代码根据GitHub
开源项目github.com/alexandrevicenzi/unchained/
修改而成,有兴趣的可以翻阅项目代码。
1. 简单的加密算法分析
直接拿出一个经过pbkdf2_sha256
加密后的密钥
pbkdf2_sha256$180000$9v62SVRUKPTf$igFByaMbYXhOh7p375LDdo2GYrUV9RbqdTaR6jbhrKg=
密钥一共分为4个部分,分别是加密算法名称
、加密迭代次数
、盐(salt)
、base64编码
,每一个部分都由美元$
符号分割,由此我们解析上面密钥的数据。
- 加密算法名称:pbkdf2_sha256
- 加密迭代次数:180000
- 盐:9v62SVRUKPTf
- Base64编码:igFByaMbYXhOh7p375LDdo2GYrUV9RbqdTaR6jbhrKg=
由于pbkdf2_sha256
属于单向
加密算法(即无法通过密钥反推原始密码),所以我们要校验密码需要用同样的方式来加密,最终将两个加密密钥对比,如果相同则认为密码正确,整体流程如下所示。