Hash password using 4.1+ method (SHA1)
(scramble []byte, password string)
| 161 | |
| 162 | // Hash password using 4.1+ method (SHA1) |
| 163 | func scramblePassword(scramble []byte, password string) []byte { |
| 164 | if len(password) == 0 { |
| 165 | return nil |
| 166 | } |
| 167 | |
| 168 | // stage1Hash = SHA1(password) |
| 169 | crypt := sha1.New() |
| 170 | crypt.Write([]byte(password)) |
| 171 | stage1 := crypt.Sum(nil) |
| 172 | |
| 173 | // scrambleHash = SHA1(scramble + SHA1(stage1Hash)) |
| 174 | // inner Hash |
| 175 | crypt.Reset() |
| 176 | crypt.Write(stage1) |
| 177 | hash := crypt.Sum(nil) |
| 178 | |
| 179 | // outer Hash |
| 180 | crypt.Reset() |
| 181 | crypt.Write(scramble) |
| 182 | crypt.Write(hash) |
| 183 | scramble = crypt.Sum(nil) |
| 184 | |
| 185 | // token = scrambleHash XOR stage1Hash |
| 186 | for i := range scramble { |
| 187 | scramble[i] ^= stage1[i] |
| 188 | } |
| 189 | return scramble |
| 190 | } |
| 191 | |
| 192 | // Hash password using MySQL 8+ method (SHA256) |
| 193 | func scrambleSHA256Password(scramble []byte, password string) []byte { |