2 回答

TA貢獻1836條經(jīng)驗 獲得超3個贊
這不是一個移位問題,它是一個輸出緩沖區(qū)大小問題,因為 iv 是加密數(shù)據(jù)的前綴。
IV 是一個空塊 (0x00),因為它從未設(shè)置為值。它被添加到加密數(shù)據(jù)之前,這很常見。需要添加一個填充塊,因為輸入數(shù)據(jù)是塊大小的精確倍數(shù)。
這個輸出緩沖區(qū)需要是 iv 的大小 + 數(shù)據(jù)的大小 + 填充塊的大小。(16 + 32 + 16 = 64)
向輸出緩沖區(qū)添加另一個塊大?。?/p>
ciphertext := make([]byte, aes.BlockSize + len(plaintext) + aes.BlockSize)

TA貢獻1806條經(jīng)驗 獲得超5個贊
PHP 版本正在編碼一個額外的 16 字節(jié)的“空”字符串,該字符串用 16 秒填充!
p1 := "0000000000000tha"
p2 := "nkustackoverflow"
p1b := []byte(p1)
p2b := []byte(p2)
p3b, _ := hex.DecodeString("10101010101010101010101010101010")
fmt.Println(p3b)
key := []byte("abcdefghijklmnop")
block, _ := aes.NewCipher(key)
ciphertext := make([]byte, aes.BlockSize+16)
iv := ciphertext[:aes.BlockSize]
mode := cipher.NewCBCEncrypter(block, iv)
i := 0
for {
if i == 0 {
mode.CryptBlocks(ciphertext[aes.BlockSize:], p1b)
} else if i == 1 {
mode.CryptBlocks(ciphertext[aes.BlockSize:], p2b)
} else if i == 2 {
mode.CryptBlocks(ciphertext[aes.BlockSize:], p3b)
}
fmt.Printf("%x\n", ciphertext[16:])
i += 1
if i > 2 {
break
}
}
這段代碼identical在 golang 中打印 php 的內(nèi)容。
- 2 回答
- 0 關(guān)注
- 186 瀏覽
添加回答
舉報