РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1246 of 1593 menu

Функция 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
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить