linux所有使用者密碼資訊都加密存儲在/etc/shadow檔案中,其中部分含義如下
/etc/shadow file fields
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISMxkTMzETNzEDOwMDM4EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
( /etc/shadow)
- 使用者名.
- 第二部分内容為:$加密算法$鹽值$加密後的密碼,即 $id$salt$hashed, 加密算法$id 在GNU/Linux 中具體指如下:
- $1$ is MD5
- $2a$ is Blowfish
- $2y$ is Blowfish
- $5$ is SHA-256
- $6$ is SHA-512
在python中有對應的碰撞算法,因本人平時寫伺服器程式多采用golang,剛好要做關于密碼驗證方面要與linux系統一緻,發現golang也有對應的加密實作;代碼如下:
package main
import (
"fmt"
"github.com/amoghe/go-crypt"
)
func main() {
//原linux shadows内容: system:$6$Pk3YRrQamkzbN6wY$owW6k6a6TSM1M32K6zsemorwR.wGjiVHTF8jelOj3nDMlLLLCzx0x6a16ZMRi91YgjlyneS2wxqMyp191p6Q7.:17166:0:99999:7::
sha512, err := crypt.Crypt("system", "$6$Pk3YRrQamkzbN6wY")
if err != nil {
fmt.Errorf("error:", err)
return
}
//輸出: $6$Pk3YRrQamkzbN6wY$owW6k6a6TSM1M32K6zsemorwR.wGjiVHTF8jelOj3nDMlLLLCzx0x6a16ZMRi91YgjlyneS2wxqMyp191p6Q7.
fmt.Println(sha512)
}
通過對應的加密算法可得出相同的加密字元串,這樣就可以驗證密碼是否一緻