sha1 в Go и PHP имеет другой результат - PullRequest
1 голос
/ 28 февраля 2020

PHP код:

$str = chr(164);
$resualt = sha1($str);
echo $resualt;

PHP результат:

f5efcd994fca895f644b0ccc362aba5d6f4ae0c6

Golang код:

str := string(164)
//fmt.Println(str)
passSha1 := sha1.New()
passSha1.Write([]byte(str))
getSha1 := passSha1.Sum(nil)
fmt.Printf("%x\n",getSha1)

Golang результат:

fe33a6b4de93e363cf1620f7228df4164d913fbf

В Go как я могу получить такой же результат, как PHP.

1 Ответ

5 голосов
/ 28 февраля 2020

Ваш код php кодирует 1-байтовый ввод, но ваш код Go делает то же самое для строки в кодировке utf-8. Если вы напечатаете len(string(164)), вы увидите, что это 2 байта. Используйте это:

str := []byte{164}
passSha1 := sha1.New()
passSha1.Write([]byte(str))
getSha1 := passSha1.Sum(nil)
fmt.Printf("%x\n",getSha1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...