Функция cipher.NewCFBDecrypter
Функция cipher.NewCFBDecrypter создает потоковый дешифратор,
работающий в режиме CFB (Cipher Feedback). Она принимает два параметра:
первый параметр — это блочный шифр (cipher.Block), реализующий
интерфейс блочного шифрования, второй параметр — вектор инициализации
(IV) фиксированной длины, равной размеру блока. Функция возвращает
интерфейс cipher.Stream, который используется для расшифровки
данных с помощью метода XORKeyStream.
Синтаксис
cipher.NewCFBDecrypter(block cipher.Block, iv []byte) cipher.Stream
Пример
Давайте рассмотрим полный пример шифрования и последующей расшифровки данных с использованием режима CFB:
package 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)
}
Результат выполнения кода:
"Encrypted: 0fecb2b8e7a4c9d1f3e5a7b9c1d3e5f7"
"Decrypted: Hello, World!"
Пример
Давайте рассмотрим пример расшифровки уже зашифрованных данных, представленных в шестнадцатеричном формате:
package 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)
}
Результат выполнения кода:
"Decrypted: Hello, World!"
Смотрите также
-
функцию
cipher.NewCFBEncrypter,
которая создает шифратор в режиме CFB -
функцию
cipher.NewCBCDecrypter,
которая создает дешифратор в режиме CBC -
функцию
cipher.NewCTR,
которая создает потоковый шифр в режиме CTR -
функцию
cipher.NewOFB,
которая создает потоковый шифр в режиме OFB