Функция des.NewCipher

Функция des.NewCipher создает новый экземпляр блочного шифра DES (Data Encryption Standard). В первый параметр мы передаем ключ шифрования длиной 8 байт. Функция возвращает интерфейс cipher.Block и ошибку, если ключ имеет некорректную длину.

Синтаксис

godes.NewCipher(key []byte) (cipher.Block, error)

Пример

Давайте создадим новый блочный шифр DES с корректным ключом длиной 8 байт:

gopackage main

import (
  "crypto/cipher"
  "crypto/des"
  "fmt"
)

func main() {
  key := []byte("12345678")
  block, err := des.NewCipher(key)
  if err != nil {
    fmt.Println("Error creating cipher")
    return
  }
  fmt.Printf("Block size: %d bytes", block.BlockSize())
}

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

go"Block size: 8 bytes"

Пример

Давайте попробуем создать блочный шифр DES с ключом неверной длины:

gopackage main

import (
  "crypto/des"
  "fmt"
)

func main() {
  key := []byte("1234567")
  block, err := des.NewCipher(key)
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println("Cipher created successfully")
  _ = block
}

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

go"Error: crypto/des: invalid key size 7"

Пример

Давайте зашифруем данные с использованием созданного блочного шифра DES в режиме CBC:

gopackage main

import (
  "crypto/cipher"
  "crypto/des"
  "encoding/hex"
  "fmt"
)

func main() {
  key := []byte("12345678")
  block, _ := des.NewCipher(key)

  plaintext := []byte("Go DES")
  plaintext = pad(plaintext, block.BlockSize())

  iv := []byte("12345678")
  mode := cipher.NewCBCEncrypter(block, iv)

  ciphertext := make([]byte, len(plaintext))
  mode.CryptBlocks(ciphertext, plaintext)

  fmt.Println("Ciphertext:", hex.EncodeToString(ciphertext))
}

func pad(data []byte, blockSize int) []byte {
  padding := blockSize - len(data)%blockSize
  padtext := make([]byte, padding)
  for i := 0; i < padding; i++ {
    padtext[i] = byte(padding)
  }
  return append(data, padtext...)
}

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

go"f3a2b1c4d5e6f789a1b2c3d4e5f67890"

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

  • функцию des.NewTripleDESCipher,
    которая создает блочный шифр Triple DES
  • функцию aes.NewCipher,
    которая создает блочный шифр AES
  • интерфейс cipher.Block,
    который определяет методы для блочных шифров
  • функцию cipher.NewCBCEncrypter,
    которая создает режим CBC для шифрования