Пакет crypto/des
Пакет crypto/des предоставляет реализацию симметричных алгоритмов шифрования DES и TripleDES. DES использует 8-байтовый ключ, а TripleDES поддерживает ключи длиной 16 или 24 байта. Основной функцией пакета является des.NewCipher, которая создает новый шифровальный блок на основе переданного ключа. Также доступна функция des.NewTripleDESCipher для создания блока TripleDES с 16- или 24-байтовым ключом.
Основные функции
Пакет содержит две основные функции для создания шифровальных блоков:
-
des.NewCipher(key []byte) (cipher.Block, error)- создает шифровальный блок для алгоритма DES. Ключ должен быть длиной 8 байт. -
des.NewTripleDESCipher(key []byte) (cipher.Block, error)- создает шифровальный блок для алгоритма TripleDES. Ключ должен иметь длину 16 или 24 байта.
Возвращаемый объект реализует интерфейс cipher.Block, который предоставляет методы BlockSize и Encrypt с Decrypt.
Синтаксис
import "crypto/des"
block, err := des.NewCipher(key)
block, err := des.NewTripleDESCipher(key)
Пример использования des.NewCipher
Создадим шифровальный блок DES с 8-байтовым ключом и зашифруем блок данных:
package main
import (
"crypto/des"
"fmt"
)
func main() {
key := []byte("12345678")
plaintext := []byte("12345678")
block, err := des.NewCipher(key)
if err != nil {
fmt.Println("Error:", err)
return
}
ciphertext := make([]byte, block.BlockSize())
block.Encrypt(ciphertext, plaintext)
fmt.Printf("Plaintext: %x\n", plaintext)
fmt.Printf("Ciphertext: %x\n", ciphertext)
}
Результат выполнения кода:
"Plaintext: 3132333435363738"
"Ciphertext: 5b23401fad2c31eb"
Пример использования des.NewTripleDESCipher
Создадим шифровальный блок TripleDES с 24-байтовым ключом и зашифруем данные:
package main
import (
"crypto/des"
"fmt"
)
func main() {
key := []byte("123456789012345678901234")
plaintext := []byte("12345678")
block, err := des.NewTripleDESCipher(key)
if err != nil {
fmt.Println("Error:", err)
return
}
ciphertext := make([]byte, block.BlockSize())
block.Encrypt(ciphertext, plaintext)
fmt.Printf("Plaintext: %x\n", plaintext)
fmt.Printf("Ciphertext: %x\n", ciphertext)
}
Результат выполнения кода:
"Plaintext: 3132333435363738"
"Ciphertext: 6e0a0b62caf12754"
Пример расшифрования с использованием des.NewTripleDESCipher
Покажем полный цикл шифрования и расшифрования с использованием TripleDES:
package main
import (
"crypto/des"
"fmt"
)
func main() {
key := []byte("123456789012345678901234")
plaintext := []byte("12345678")
block, err := des.NewTripleDESCipher(key)
if err != nil {
fmt.Println("Error:", err)
return
}
ciphertext := make([]byte, block.BlockSize())
block.Encrypt(ciphertext, plaintext)
decrypted := make([]byte, block.BlockSize())
block.Decrypt(decrypted, ciphertext)
fmt.Printf("Original: %s\n", plaintext)
fmt.Printf("Decrypted: %s\n", decrypted)
}
Результат выполнения кода:
"Original: 12345678"
"Decrypted: 12345678"
Смотрите также
-
функцию
des.NewCipher,
которая создает шифровальный блок DES с 8-байтовым ключом -
функцию
des.NewTripleDESCipher,
которая создает шифровальный блок TripleDES с 16- или 24-байтовым ключом -
пакет
crypto/aes,
который предоставляет реализацию более современного алгоритма шифрования AES -
интерфейс
cipher.Block,
который реализуют все шифровальные блоки в пакете crypto