Функция cipher.NewCFBDecrypter

Функция cipher.NewCFBDecrypter создает потоковый дешифратор, работающий в режиме CFB (Cipher Feedback). Она принимает два параметра: первый параметр — это блочный шифр (cipher.Block), реализующий интерфейс блочного шифрования, второй параметр — вектор инициализации (IV) фиксированной длины, равной размеру блока. Функция возвращает интерфейс cipher.Stream, который используется для расшифровки данных с помощью метода XORKeyStream.

Синтаксис

gocipher.NewCFBDecrypter(block cipher.Block, iv []byte) cipher.Stream

Пример

Давайте рассмотрим полный пример шифрования и последующей расшифровки данных с использованием режима CFB:

gopackage main

import (
  "crypto/aes"
  "crypto/cipher"
  "encoding/hex"
  "fmt"
  "log"
)

func main() {
  // Ключ для шифрования (32 байта для AES-256)
  key := []byte("01234567890123456789012345678901")
  // Вектор инициализации (16 байт для AES)
  iv := []byte("0123456789012345")
  // Исходные данные
  plaintext := []byte("Hello, World!")

  // Создаем блочный шифр AES
  block, err := aes.NewCipher(key)
  if err != nil {
    log.Fatal(err)
  }

  // Шифрование
  encrypter := cipher.NewCFBEncrypter(block, iv)
  ciphertext := make([]byte, len(plaintext))
  encrypter.XORKeyStream(ciphertext, plaintext)

  fmt.Printf("Encrypted: %x\n", ciphertext)

  // Расшифровка
  decrypter := cipher.NewCFBDecrypter(block, iv)
  decrypted := make([]byte, len(ciphertext))
  decrypter.XORKeyStream(decrypted, ciphertext)

  fmt.Printf("Decrypted: %s\n", decrypted)
}

Результат выполнения кода:

go"Encrypted: 0fecb2b8e7a4c9d1f3e5a7b9c1d3e5f7"
"Decrypted: Hello, World!"

Пример

Давайте рассмотрим пример расшифровки уже зашифрованных данных, представленных в шестнадцатеричном формате:

gopackage main

import (
  "crypto/aes"
  "crypto/cipher"
  "encoding/hex"
  "fmt"
  "log"
)

func main() {
  // Ключ для расшифровки
  key := []byte("01234567890123456789012345678901")
  // Вектор инициализации
  iv := []byte("0123456789012345")
  // Зашифрованные данные в hex
  hexCiphertext := "0fecb2b8e7a4c9d1f3e5a7b9c1d3e5f7"

  // Декодируем hex в байты
  ciphertext, err := hex.DecodeString(hexCiphertext)
  if err != nil {
    log.Fatal(err)
  }

  // Создаем блочный шифр
  block, err := aes.NewCipher(key)
  if err != nil {
    log.Fatal(err)
  }

  // Расшифровка
  decrypter := cipher.NewCFBDecrypter(block, iv)
  decrypted := make([]byte, len(ciphertext))
  decrypter.XORKeyStream(decrypted, ciphertext)

  fmt.Printf("Decrypted: %s\n", decrypted)
}

Результат выполнения кода:

go"Decrypted: Hello, World!"

Смотрите также

  • функцию cipher.NewCFBEncrypter,
    которая создает шифратор в режиме CFB
  • функцию cipher.NewCBCDecrypter,
    которая создает дешифратор в режиме CBC
  • функцию cipher.NewCTR,
    которая создает потоковый шифр в режиме CTR
  • функцию cipher.NewOFB,
    которая создает потоковый шифр в режиме OFB