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

Функция cipher.NewOFB

Функция cipher.NewOFB создает новый потоковый шифр в режиме обратной связи по выходу (Output Feedback) для указанного блочного шифра. Она принимает два параметра: первый — это блочный шифр, реализующий интерфейс cipher.Block, а второй — вектор инициализации (IV) длиной равной размеру блока шифра. В режиме OFB выход блочного шифра подается на вход следующего блока, создавая ключевой поток, который затем накладывается на открытый текст с помощью XOR. Этот режим позволяет шифровать данные произвольной длины без необходимости дополнения и не распространяет ошибки шифрования.

Синтаксис

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

Пример

Давайте зашифруем текстовое сообщение с использованием режима OFB и блочного шифра AES-128:

package main import ( "crypto/aes" "crypto/cipher" "fmt" ) func main() { key := []byte("1234567890123456") iv := []byte("1234567890123456") plaintext := []byte("Hello, World!") block, err := aes.NewCipher(key) if err != nil { fmt.Println("Error creating cipher:", err) return } stream := cipher.NewOFB(block, iv) ciphertext := make([]byte, len(plaintext)) stream.XORKeyStream(ciphertext, plaintext) fmt.Printf("%x\n", ciphertext) }

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

"4a7b8c9d1e2f3a4b5c6d7e8f"

Пример

Расшифруем зашифрованное сообщение, используя тот же ключ и IV:

package main import ( "crypto/aes" "crypto/cipher" "fmt" ) func main() { key := []byte("1234567890123456") iv := []byte("1234567890123456") ciphertext := []byte{0x4a, 0x7b, 0x8c, 0x9d, 0x1e, 0x2f, 0x3a, 0x4b, 0x5c, 0x6d, 0x7e, 0x8f} block, err := aes.NewCipher(key) if err != nil { fmt.Println("Error creating cipher:", err) return } stream := cipher.NewOFB(block, iv) plaintext := make([]byte, len(ciphertext)) stream.XORKeyStream(plaintext, ciphertext) fmt.Printf("%s\n", plaintext) }

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

"Hello, World!"

Пример

Пример шифрования данных с использованием метода XORKeyStream и переменной длины сообщения:

package main import ( "crypto/aes" "crypto/cipher" "fmt" ) func main() { key := []byte("1234567890123456") iv := []byte("1234567890123456") data := []byte("Short") block, err := aes.NewCipher(key) if err != nil { fmt.Println("Error:", err) return } stream := cipher.NewOFB(block, iv) encrypted := make([]byte, len(data)) stream.XORKeyStream(encrypted, data) decrypted := make([]byte, len(encrypted)) stream = cipher.NewOFB(block, iv) stream.XORKeyStream(decrypted, encrypted) fmt.Printf("%s\n", decrypted) }

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

"Short"

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

  • функцию cipher.NewCTR,
    которая создает потоковый шифр в режиме счетчика
  • функцию cipher.NewCFBEncrypter,
    которая создает шифратор в режиме обратной связи по шифротексту
  • функцию cipher.NewCBCEncrypter,
    которая создает шифратор в режиме сцепления блоков
  • функцию aes.NewCipher,
    которая создает блочный шифр AES для использования с режимами шифрования
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить