Генерация хеширования crypt () sha512 в Go

Я работаю над своим модулем авторизации в GoLang. До этого мы использовали PHP5 с функцией crypt. Хеш был сгенерирован как SHA-512:

$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

И хранится так в базе данных. Но теперь мне нужно заставить его работать и в GoLang. Я искал в Google и пробовал разные вещи, такие как:

t512 := sha512_crypt.Crypt("rasmuslerdorf", "$6$usesomesillystringforsalt$")
fmt.Printf("hash: %v\n", t512)

Но все порождают разные вещи. Кто может помочь нам дальше?

Мы хотим проверять и создавать хэши, такие как версия php.

Заранее спасибо.

0

Решение

osutil библиотека в https://github.com/kless/osutil имеет поддержку для всех crypt() типы хэшей.

Ваш хэш пароля может быть создан с помощью следующего php-кода:

echo crypt('rasmuslerdorf', '$6$usesomesillystringforsalt');

Этот код создает следующий хеш:

$6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

Это может быть воспроизведено в Go следующим образом:

package main

import (
"fmt"
"github.com/kless/osutil/user/crypt/sha512_crypt")

func main() {
c := sha512_crypt.New()
hash, err := c.Generate([]byte("rasmuslerdorf"), []byte("$6$usesomesillystringforsalt"))
if err != nil {
panic(err)
}

fmt.Println(hash)
}

При запуске он также выдает правильный хеш:

$6$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

Надеюсь, это ответит на ваш вопрос.

При реализации этого обратите внимание, что из соли используется только 16 символов, поэтому тот же хеш возвращается для соли usesomesillystri, Убедитесь, что вы выбрали случайные соли в производственном коде.

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]