我需要在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 关注
- 167 浏览
添加回答
举报
0/150
提交
取消