Go crypto/cipher XORKeyStream对src[]字节做了什么?

Go crypto/cipher XORKeyStream对src[]字节做了什么?,go,aes,Go,Aes,我正在使用Go进行AES加密,我发现加密后源字节发生了变化。如果cap(source)>len(source),那么XORKeyStream函数会对src[]字节做什么更改 go版本go1.12.5达尔文/amd64 func main(){ 字节1:=[]字节(“123abc”) fmt.Println(“content1:,byte1,“len1:”,len(byte1),“cap1:”,cap(byte1))//content1:[495051979899]len1:6 cap1:6 bu

我正在使用Go进行AES加密,我发现加密后源字节发生了变化。如果cap(source)>len(source),那么XORKeyStream函数会对src[]字节做什么更改

go版本go1.12.5达尔文/amd64

func main(){
字节1:=[]字节(“123abc”)
fmt.Println(“content1:,byte1,“len1:”,len(byte1),“cap1:”,cap(byte1))//content1:[495051979899]len1:6 cap1:6
buf:=bytes.NewBuffer([]字节(“123abc”))
字节2,Util:=ioutil.ReadAll(buf)
fmt.Println(“content2:,byte2,len2:,len(byte2),“cap2:,cap(byte2))//content2:[495051979899]len2:6cap2:1536
_,u,u,err:=crypt.AESEnc(字节1)
如果错误!=零{
log.Fatal(错误)
}
fmt.Println(“content1:,byte1,“len1:”,len(byte1),“cap1:”,cap(byte1))//content1:[495051979899]len1:6 cap1:6
_,u,u,err=crypt.AESEnc(字节2)
如果错误!=零{
log.Fatal(错误)
}
fmt.Println(“content2:,byte2,len2:,len(byte2),“cap2:,cap(byte2))//content2:[13220072001958]len2:6 cap2:1536
}
func AESEnc(数据[]字节)([]字节,[]字节,字符串,错误){
键:=make([]字节,16)
iv:=make([]字节,16)
_,err:=io.ReadFull(rand.Reader,key)
如果错误!=零{
返回nil,nil,“,err
}
_,err=io.ReadFull(rand.Reader,iv)
如果错误!=零{
返回nil,nil,“,err
}
块,错误:=aes.NewCipher(密钥)
如果错误!=零{
返回nil,nil,“,err
}
pdata:=pckspadding(数据,block.BlockSize())
流:=密码。加密程序(块,iv)
stream.XORKeyStream(pdata,pdata)
返回键,iv,base64.StdEncoding.EncodeToString(pdata),无
}
func pckspadding(密文[]字节,块大小int)[]字节{
填充:=块大小-len(密文)%blockSize
padtext:=字节。重复([]字节{字节(填充)},填充)
返回附加(密文、padtext…)
}

字节2在加密后发生了变化,发生了什么?

我对加密/密码XORKeyStream不太熟悉,但我可以告诉你XOR对位做了什么,如果这很有用的话。我有一些电子方面的经验,下面是XOR门的真值表:

输入X和Y表示两位。输出Z是对X和Y进行异或运算的结果

在英语中,你会对自己说“输入,要么一个,要么另一个,但不是两个”的结果是“真”

不知道这会有多大帮助,也不知道如何使用加密/密码XORKeyStream将其应用于两个以上的输入位。 但这里有一个例子:

X = 00110001010
Y = 11111111111
Z = 11001110101

祝你好运

我对加密/cypher XORKeyStream不熟悉,但如果有用的话,我可以告诉您XOR对位做了什么。我有一些电子方面的经验,下面是XOR门的真值表:

输入X和Y表示两位。输出Z是对X和Y进行异或运算的结果

在英语中,你会对自己说“输入,要么一个,要么另一个,但不是两个”的结果是“真”

不知道这会有多大帮助,也不知道如何使用加密/密码XORKeyStream将其应用于两个以上的输入位。 但这里有一个例子:

X = 00110001010
Y = 11111111111
Z = 11001110101
祝你好运