Функция des.NewCipher
Функция des.NewCipher создает новый экземпляр блочного шифра
DES (Data Encryption Standard). В первый параметр мы передаем ключ
шифрования длиной 8 байт. Функция возвращает интерфейс
cipher.Block и ошибку, если ключ имеет некорректную длину.
Синтаксис
des.NewCipher(key []byte) (cipher.Block, error)
Пример
Давайте создадим новый блочный шифр DES с корректным ключом длиной 8 байт:
package 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())
}
Результат выполнения кода:
"Block size: 8 bytes"
Пример
Давайте попробуем создать блочный шифр DES с ключом неверной длины:
package 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
}
Результат выполнения кода:
"Error: crypto/des: invalid key size 7"
Пример
Давайте зашифруем данные с использованием созданного блочного шифра DES в режиме CBC:
package 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...)
}
Результат выполнения кода:
"f3a2b1c4d5e6f789a1b2c3d4e5f67890"
Смотрите также
-
функцию
des.NewTripleDESCipher,
которая создает блочный шифр Triple DES -
функцию
aes.NewCipher,
которая создает блочный шифр AES -
интерфейс
cipher.Block,
который определяет методы для блочных шифров -
функцию
cipher.NewCBCEncrypter,
которая создает режим CBC для шифрования