Назад к вопросам
Senior
12
What symmetric and asymmetric encryption algorithms do you know?
Компании, где спрашивали
Kaspersky
Ответ от нейросети
sobes.tech AI
Симметричные алгоритмы шифрования используют один и тот же ключ для шифрования и расшифровки данных. Среди популярных:
- AES (Advanced Encryption Standard) — широко применяется, обеспечивает высокую скорость и безопасность.
- DES и 3DES — устаревшие, сейчас редко используются из-за уязвимостей.
- ChaCha20 — современный потоковый шифр, часто применяется в мобильных и сетевых протоколах.
Асимметричные алгоритмы используют пару ключей: публичный для шифрования и приватный для расшифровки.
- RSA — классический алгоритм, широко используется для обмена ключами и цифровых подписей.
- ECC (Elliptic Curve Cryptography) — более эффективен при меньших размерах ключей, популярен в мобильных и встроенных системах.
- ElGamal — применяется для шифрования и цифровых подписей, основан на дискретном логарифме.
Пример использования AES в Go:
package main
import (
"crypto/aes"
"crypto/cipher"
"crypto/rand"
"fmt"
"io"
)
func encrypt(plaintext []byte, key []byte) ([]byte, error) {
block, err := aes.NewCipher(key)
if err != nil {
return nil, err
}
ciphertext := make([]byte, aes.BlockSize+len(plaintext))
iv := ciphertext[:aes.BlockSize]
if _, err := io.ReadFull(rand.Reader, iv); err != nil {
return nil, err
}
stream := cipher.NewCFBEncrypter(block, iv)
stream.XORKeyStream(ciphertext[aes.BlockSize:], plaintext)
return ciphertext, nil
}
func main() {
key := []byte("example key 1234") // 16 bytes for AES-128
plaintext := []byte("Hello, World!")
ciphertext, err := encrypt(plaintext, key)
if err != nil {
panic(err)
}
fmt.Printf("Encrypted: %x\n", ciphertext)
}