Функция cipher.NewCBCDecrypter
Функция cipher.NewCBCDecrypter создает новый блочный шифр
в режиме CBC для расшифровки данных. На вход она принимает
блочный шифр (реализующий интерфейс cipher.Block)
и вектор инициализации (IV). Возвращает объект,
реализующий интерфейс cipher.BlockMode.
Длина IV должна совпадать с размером блока шифра.
Синтаксис
cipher.NewCBCDecrypter(block cipher.Block, iv []byte) cipher.BlockMode
Пример
Давайте расшифруем данные, зашифрованные с помощью AES в режиме CBC:
package main
import (
"crypto/aes"
"crypto/cipher"
"fmt"
)
func main() {
// Ключ и вектор инициализации должны быть такими же, как при шифровании
key := []byte("0123456789abcdef0123456789abcdef") // 32 байта для AES-256
iv := []byte("1234567890abcdef") // 16 байт для AES
// Зашифрованные данные (обычно получаем извне)
ciphertext := []byte{
0x8b, 0x1a, 0x99, 0x5a, 0x8c, 0x31, 0x3a, 0x7c,
0x2a, 0x6f, 0x9f, 0x44, 0x57, 0x8d, 0x3d, 0x1b,
}
// Создаем блочный шифр AES
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
// Создаем расшифровщик в режиме CBC
mode := cipher.NewCBCDecrypter(block, iv)
// Расшифровываем данные
plaintext := make([]byte, len(ciphertext))
mode.CryptBlocks(plaintext, ciphertext)
fmt.Printf("%s\n", plaintext)
}
Результат выполнения кода:
"Hello, World!"
Пример
Давайте расшифруем данные с использованием блочного шифра с размером блока 16 байт (AES-128):
package main
import (
"crypto/aes"
"crypto/cipher"
"fmt"
)
func main() {
// Ключ 16 байт для AES-128
key := []byte("0123456789abcdef")
iv := []byte("1234567890abcdef")
// Зашифрованные данные с PKCS#7 паддингом
ciphertext := []byte{
0x9c, 0x6e, 0x9b, 0x6f, 0xa7, 0x8e, 0x3c, 0x7b,
0x2d, 0x4b, 0x3a, 0x7f, 0x9c, 0x8d, 0x3a, 0x1b,
}
block, err := aes.NewCipher(key)
if err != nil {
panic(err)
}
mode := cipher.NewCBCDecrypter(block, iv)
plaintext := make([]byte, len(ciphertext))
mode.CryptBlocks(plaintext, ciphertext)
// После расшифровки необходимо удалить паддинг
fmt.Printf("%q\n", plaintext[:len(plaintext)-int(plaintext[len(plaintext)-1])])
}
Результат выполнения кода:
"Hello, World!"
Смотрите также
-
функцию
cipher.NewCBCEncrypter,
которая создает объект для шифрования в режиме CBC -
функцию
cipher.NewCFBDecrypter,
которая создает объект для расшифровки в режиме CFB -
интерфейс
cipher.BlockMode,
который реализует объект, возвращаемый функцией -
функцию
aes.NewCipher,
которая создает блочный шифр AES для использования в режиме CBC