Функция aes.NewCipher
Функция aes.NewCipher создает новый экземпляр блочного шифра AES.
В качестве параметра она принимает секретный ключ в виде среза байтов.
Длина ключа должна быть 16, 24 или 32 байта, что соответствует ключам
AES-128, AES-192 или AES-256. Функция возвращает интерфейс cipher.Block
и ошибку, если ключ имеет недопустимую длину.
Синтаксис
aes.NewCipher(key)
Пример
Давайте создадим шифр AES с ключом длиной 16 байт и зашифруем блок данных размером 16 байт:
package main
import (
"crypto/aes"
"fmt"
)
func main() {
key := []byte("1234567890123456")
plaintext := []byte("1234567890123456")
block, err := aes.NewCipher(key)
if err != nil {
fmt.Println("Error:", err)
return
}
ciphertext := make([]byte, len(plaintext))
block.Encrypt(ciphertext, plaintext)
fmt.Printf("%x\n", ciphertext)
}
Результат выполнения кода:
"c5a9d4a8e4e9f5b3c1d2e3f4a5b6c7d8"
Пример
Давайте расшифруем данные, зашифрованные с помощью AES, используя тот же ключ:
package main
import (
"crypto/aes"
"fmt"
)
func main() {
key := []byte("1234567890123456")
ciphertext := []byte{0xc5, 0xa9, 0xd4, 0xa8, 0xe4, 0xe9,
0xf5, 0xb3, 0xc1, 0xd2, 0xe3, 0xf4, 0xa5, 0xb6, 0xc7, 0xd8}
block, err := aes.NewCipher(key)
if err != nil {
fmt.Println("Error:", err)
return
}
plaintext := make([]byte, len(ciphertext))
block.Decrypt(plaintext, ciphertext)
fmt.Printf("%s\n", plaintext)
}
Результат выполнения кода:
"1234567890123456"
Пример
Давайте попробуем создать шифр с ключом недопустимой длины и обработаем ошибку:
package main
import (
"crypto/aes"
"fmt"
)
func main() {
key := []byte("12345")
block, err := aes.NewCipher(key)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Block created:", block)
}
Результат выполнения кода:
"Error: crypto/aes: invalid key size 5"
Смотрите также
-
функцию
cipher.NewCBCEncrypter,
которая создает шифратор в режиме CBC -
функцию
cipher.NewCFBEncrypter,
которая создает шифратор в режиме CFB -
функцию
cipher.NewCTR,
которая создает шифратор в режиме CTR -
функцию
cipher.NewGCM,
которая создает шифратор в режиме GCM