查找字符串的 MSB 和 LSB

我需要在Go中执行以下操作:

  1. 连接 2 个字符串

  2. 计算串联字符串(128 位数组)的 MD5 哈希

  3. 将 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 string

byte[] 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;


慕容森
浏览 240回答 1
1回答

富国沪深

不能对 使用按位运算符,它只适用于整数值。您可以使用编码/二进制包将字节转换为合适的 64 位值到 XOR,并在此处使用小端字节序字节顺序,如提供的 java 代码所示。bytes.Buffer获得值后,可以根据需要设置返回的字符串的格式。fmt.Sprintfstrconvfunc 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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go