2016-11-29 6 views
4

Ich wollte den Symfony Passwort Hash in Golang implementieren. Das Ergebnis ist das gleiche wie erwartet etwas Charakter.PHP und Golang sha512 unterschiedliches Ergebnis

symfony Lösung:

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); 

Die Golang Lösung:

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 Das Ergebnis:

yIp0074qTaxBz7fOGFpTVYU7LaAterUko6YjnmCZ55R6lAYouXWFoBKT_wI7Vit87RKbU9I-U3M2mU11v_KEUQ== 

Das PHP Ergebnis:

yIp0074qTaxBz7fOGFpTVYU7LaAterUko6YjnmCZ55R6lAYouXWFoBKT/wI7Vit87RKbU9I+U3M2mU11v/KEUQ== 

Also wie das Beispiel gezeigt, ist es das gleiche nur ein anderes Zeichen lik -, /, + sind die verschiedenen. Ich denke es kann an der Zeichencodierung liegen, aber ich habe keine Ahnung, wie ich das ermitteln kann. Umgebung: Fedora 23, Go 1.7, PHP 5.6

Antwort

4

Sie verwenden URLEncoding, während PHP scheint, Standardcodierung zu verwenden. Ersetzen

digest := base64.URLEncoding.EncodeToString(container) 

mit

digest := base64.StdEncoding.EncodeToString(container) 

und es gibt die gleichen Ergebnisse wie PHP: https://play.golang.org/p/6pHCN6rb9U.

+0

Danke, es ist das Problem gelöst. – PumpkinSeed

Verwandte Themen