为了账号安全,请及时绑定邮箱和手机立即绑定

查找字符串的 MSB 和 LSB

查找字符串的 MSB 和 LSB

Go
慕容森 2022-08-01 19:09:41
我需要在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)

}


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 167 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信