亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找字符串的 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 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號