天天看點

golang 加密碰撞linux shadow檔案

linux所有使用者密碼資訊都加密存儲在/etc/shadow檔案中,其中部分含義如下

/etc/shadow file fields

golang 加密碰撞linux shadow檔案

( /etc/shadow)

  1.  使用者名.
  2.  第二部分内容為:$加密算法$鹽值$加密後的密碼,即 $id$salt$hashed, 加密算法$id 在GNU/Linux 中具體指如下:
    1. $1$ is MD5
    2. $2a$ is Blowfish
    3. $2y$ is Blowfish
    4. $5$ is SHA-256
    5. $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)

}
           

通過對應的加密算法可得出相同的加密字元串,這樣就可以驗證密碼是否一緻