일부 오래된 C# 코드를 Golang으로 변환해야하며 어딘가에 머물러 있습니다. C# 코드 그래서 나는 선으로 코드 라인을 검토하고 내가 이해 그가 소금과 암호를 바이트 배열 한 후 변환을 사용 그가 'DST'배열이 배열을 복사 한이 `C# SHA1 코드를 Golang으로 변환
byte[] bytes = Encoding.Unicode.GetBytes(password);
byte[] src = Encoding.Unicode.GetBytes(salt);
byte[] dst = new byte[src.Length + bytes.Length];
Buffer.BlockCopy(src, 0, dst, 0, src.Length);
Buffer.BlockCopy(bytes, 0, dst, src.Length, bytes.Length);
HashAlgorithm algorithm = HashAlgorithm.Create("SHA1");
byte[] inArray = algorithm.ComputeHash(dst);
return Convert.ToBase64String(inArray);
것 같습니다. 그런 다음 SHA1 알고리즘을 사용하고이 배열을 base64string으로 변환합니다.
My Golang 코드는 다음과 유사하지만 데이터베이스에 저장되는 문자열과 동일한 문자열을 생성하지 않습니다.
s := "fish123"
salt := "227EA7ABD26E40608A6EDEB209058D93A632D1D1A52246D0A27F6E447B16AEBF"
h1 := sha1.New()
h1.Write([]byte(salt))
h1.Write([]byte(s))
hashedPassword := base64.StdEncoding.EncodeToString(h1.Sum(nil))
누구든지 내 잘못을 찾을 수 있습니까? 감사합니다
나는 Golang을 모르지만, 가장 먼저 알아챈 것은'Encoding.Unicode.GetBytes'를 사용하고 있다는 것입니다. 이는'bytes'와'src' 배열에 문자 당 2 바이트를 생성한다는 것을 의미합니다. 'dst' 배열. Golang 코드가 올바르게 처리되는지 확인할 수 있습니까? – Paya
@icza 왜 소금을 16 진수 문자열로 해석해야하는지 이해할 수 없습니까? 데이터베이스에서 그것은 문자열로 저장됩니다. –