gpt4 book ai didi

go - byte slice 自行更改

转载 作者:行者123 更新时间:2023-12-01 22:41:29 25 4
gpt4 key购买 nike

我正在尝试实现加密,并且原始文本的 byte slice 有问题。一开始它具有正确的值,但是在我使用加密功能之后,它正在改变,我不知道为什么。请帮忙。这是我的输出代码的一小部分:

func main() {
str := "Hello it's me, a Mario!!"
text := []byte(str)

keys := magmaExpandKey([]byte("asdfghjklz,cmvnfkwadmandksjtmdolasdasdf"))

var crypted []byte

//First block just for example
fmt.Printf("Original: %b\n", text[0:8])
crypted = magmaEncrypt(text[0:8], keys)
fmt.Printf("Original: %b\n", text[0:8])

/* Output:
Original: [1001000 1100101 1101100 1101100 1101111 100000 1101001 1110100]
Original: [1001000 1100101 1101100 1101100 11000011 1101001 11001110 1010111]
*/


fmt.Printf("Crypted: %s\n", crypted)
fmt.Printf("Decrypted: %s\n", magmaDecrypt(crypted, keys))
}

func magmaEncrypt(blk []byte, keys []roundKey) []byte {
var crypted []byte

crypted = magmaG(keys[0].Key, blk)

for i := 1; i < 31; i++ {
crypted = magmaG(keys[i].Key, crypted)
}

crypted = magmaG(keys[31].Key, crypted)

return crypted
}


Full code on pastebin

最佳答案

您的函数magmaG返回append(left, right),此时left指向blk[4:8]。当blk具有足够的容量时,此append会覆盖blk的基础数组,从而导致“原始”内容以您所看到的稍微不可预测的方式发生变化。

在您的pastebin链接中,magmaG函数如下所示:

func magmaG(k []byte, a []byte) []byte {
var left []byte
var right []byte
var G []byte

// Делим 64-битный исходный блок на две части
left = a[0:4]
right = a[4:8]

// Производим преобразование g
G = magma_g(k, right)

// Ксорим результат преобразования g с левой половиной блока
G = magmaAddXor(left, G)

// Пишем в левую половину значение из правой
left = right

// Пишем результат GOST_Magma_Add в правую половину блока
right = G

// Сводим правую и левую части блока в одно целое
return append(left, right...)
}

一个简单的更改就是用 return append(append([]byte{}, left...), right...)替换最后一行,该字符串从一个新的空后备数组构造一个 byte slice 。

我注意到,通过删除所有中间变量,可以大大简化您的代码:
func magmaG(k, a []byte) []byte {
G := magma_g(k, a[4:8])
G = magmaAddXor(a[:4], G)
return append(append(make([]byte, 0, 8), a[4:8]...), G...)
}

关于go - byte slice 自行更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62355608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com