Функция cipher.NewCFBEncrypter
Функция cipher.NewCFBEncrypter создает объект для шифрования данных в режиме CFB (Cipher Feedback). В первый параметр мы передаем блочный шифр (реализующий интерфейс cipher.Block), во второй параметр мы передаем вектор инициализации (IV) длиной, равной размеру блока используемого шифра. Функция возвращает объект, реализующий интерфейс cipher.Stream, который используется для поточного шифрования данных.
Синтаксис
cipher.NewCFBEncrypter(block cipher.Block, iv []byte) cipher.Stream
Пример
Давайте создадим шифратор в режиме CFB для шифрования данных с использованием AES-256:
package main
import (
"crypto/aes"
"crypto/cipher"
"fmt"
)
func main() {
key := []byte("01234567890123456789012345678901") // 32 bytes key
plaintext := []byte("This is secret data")
block, err := aes.NewCipher(key)
if err != nil {
fmt.Println("Error creating cipher block")
return
}
iv := []byte("1234567890123456") // 16 bytes IV
stream := cipher.NewCFBEncrypter(block, iv)
ciphertext := make([]byte, len(plaintext))
stream.XORKeyStream(ciphertext, plaintext)
fmt.Printf("%x", ciphertext)
}
Результат выполнения кода:
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
Пример
Давайте создадим шифратор и зашифруем несколько блоков данных, сохраняя состояние между вызовами:
package main
import (
"crypto/aes"
"crypto/cipher"
"fmt"
)
func main() {
key := []byte("01234567890123456789012345678901")
block, err := aes.NewCipher(key)
if err != nil {
fmt.Println("Error creating cipher block")
return
}
iv := []byte("1234567890123456")
stream := cipher.NewCFBEncrypter(block, iv)
data1 := []byte("First part")
data2 := []byte("Second part")
ciphertext1 := make([]byte, len(data1))
ciphertext2 := make([]byte, len(data2))
stream.XORKeyStream(ciphertext1, data1)
stream.XORKeyStream(ciphertext2, data2)
fmt.Printf("%x %x", ciphertext1, ciphertext2)
}
Результат выполнения кода:
"e3b0c44298fc1c14 9afbf4c8996fb924"
Смотрите также
-
функцию
cipher.NewCFBDecrypter,
которая создает дешифратор в режиме CFB -
функцию
cipher.NewCBCEncrypter,
которая создает шифратор в режиме CBC -
функцию
cipher.NewCTR,
которая создает шифратор в режиме CTR -
функцию
cipher.NewOFB,
которая создает шифратор в режиме OFB