gpt4 book ai didi

PHP 和 Golang sha512 不同的结果

转载 作者:IT王子 更新时间:2023-10-29 00:43:38 27 4
gpt4 key购买 nike

我想在 Golang 中实现 Symfony 密码哈希。结果是相同的期望一些字符。

Symfony 解决方案:

function mergePasswordAndSalt($password, $salt)
{
return $password.'{'.$salt.'}';
}

$salted = mergePasswordAndSalt('asd12345', 'korsipcidz4w84kk0cccwo840s8s4sg');
$digest = hash('sha512', $salted, true);


for ($i = 1; $i < 5000; ++$i) {
$new = $digest.$salted;
$digest = hash('sha512', $new, true);
}

echo base64_encode($digest);

Golang 解决方案:

package main

import (
"crypto/sha512"
"encoding/base64"
"fmt"
"hash"
)

var (
hasher hash.Hash
container []byte
)

func main() {
password := "asd12345"
salt := "korsipcidz4w84kk0cccwo840s8s4sg"
salted := []byte(password + "{" + salt + "}")

hasher = sha512.New()
hasher.Write(salted)
container = hasher.Sum(nil)

for i := 1; i < 5000; i++ {
new := append(container[:], salted[:]...)

hasher = sha512.New()
hasher.Write(new)
container = hasher.Sum(nil)
}
digest := base64.URLEncoding.EncodeToString(container)
fmt.Println(digest)
}

Golang 结果:

yIp0074qTaxBz7fOGFpTVYU7LaAterUko6YjnmCZ55R6lAYouXWFoBKT_wI7Vit87RKbU9I-U3M2mU11v_KEUQ==

PHP 结果:

yIp0074qTaxBz7fOGFpTVYU7LaAterUko6YjnmCZ55R6lAYouXWFoBKT/wI7Vit87RKbU9I+U3M2mU11v/KEUQ==

那么这个例子是如何显示的,它是相同的,只是一些其他字符 lik -,/,+ 是不同的。我认为这可能是因为字符编码,但我不知道,我该如何确定。环境:Fedora 23、Go 1.7、PHP 5.6

最佳答案

您正在使用 URLEncoding,而 PHP 似乎使用标准编码。替换

digest := base64.URLEncoding.EncodeToString(container)

digest := base64.StdEncoding.EncodeToString(container)

它发出与 PHP 相同的结果:https://play.golang.org/p/6pHCN6rb9U .

关于PHP 和 Golang sha512 不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40863230/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com