我需要在Go中執行以下操作:連接 2 個字符串計算串聯字符串(128 位數組)的 MD5 哈希將 XOR 運算符應用于 MD5 哈希上的 64 LSB 和 64 MSB。我可以使用“crypto/md5”包計算字符串的MD5哈希,但在實現步驟#3時遇到問題。這是我想出的代碼,我認為這是不正確的,并且沒有看到任何從字符串中獲取MSB和LSB的鏈接。func GenerateHashKey(s1 string, s2 string) string { if s1 == "" { return "" } data := []byte(s1 + s2) md5sum := md5.Sum(data) // 0: uint32 lsb := bytes.NewBuffer(md5sum[:9]) // 0-8 msb := bytes.NewBuffer(md5sum[9:]) // 9-16 return msb ^ lsb; //This results in an error}這是一個相應的工作Java代碼,我需要將其轉換為Go。//input is a concatenated stringbyte[] str = input.getBytes("UTF-8");byte[] md5sum = MessageDigest.getInstance("MD5").digest(str);long lsb =ByteBuffer.wrap(md5sum).order(ByteOrder.LITTLE_ENDIAN).getLong(0);long msb =ByteBuffer.wrap(md5sum).order(ByteOrder.LITTLE_ENDIAN).getLong(8);return msb ^ lsb;
1 回答

富國滬深
TA貢獻1790條經驗 獲得超9個贊
不能對 使用按位運算符,它只適用于整數值。您可以使用編碼/二進制包將字節轉換為合適的 64 位值到 XOR,并在此處使用小端字節序字節順序,如提供的 java 代碼所示。bytes.Buffer
獲得值后,可以根據需要設置返回的字符串的格式。fmt.Sprintfstrconv
func GenerateHashKey(s1 string, s2 string) string {
data := []byte(s1 + s2)
md5sum := md5.Sum(data)
lsb := binary.LittleEndian.Uint64(md5sum[:8])
msb := binary.LittleEndian.Uint64(md5sum[8:])
return strconv.FormatUint(lsb^msb, 10)
}
- 1 回答
- 0 關注
- 201 瀏覽
添加回答
舉報
0/150
提交
取消