Ответ
Стандартная библиотека Go предоставляет мощный и обширный набор инструментов для криптографии, сосредоточенный в пакете crypto
и его подпакетах. Он позволяет реализовать большинство современных задач по защите данных.
Основные возможности можно сгруппировать так:
-
Хеширование (Hasing):
- Пакеты:
crypto/md5
,crypto/sha1
,crypto/sha256
,crypto/sha512
. - Назначение: проверка целостности данных, хранение паролей (с использованием "соли"), создание цифровых отпечатков.
-
Пример (SHA-256):
package main import ( "crypto/sha256" "fmt" ) func main() { data := []byte("secret data") hash := sha256.Sum256(data) fmt.Printf("SHA256 Hash: %xn", hash) }
- Пакеты:
-
Симметричное шифрование (Symmetric Encryption):
- Пакеты:
crypto/aes
,crypto/des
. - Назначение: шифрование данных, когда один и тот же ключ используется для шифрования и дешифрования. AES является современным стандартом.
- Пакеты:
-
Асимметричное шифрование (Asymmetric Encryption):
- Пакеты:
crypto/rsa
,crypto/ecdsa
. - Назначение: используется пара ключей (публичный и приватный). Применяется для цифровых подписей и безопасного обмена ключами.
- Пакеты:
-
Генерация криптографически стойких случайных чисел:
- Пакет:
crypto/rand
. - Назначение: генерация ключей, "солей", initialization vectors (IV). Важно: всегда используйте
crypto/rand
для задач безопасности вместоmath/rand
.
- Пакет:
-
Безопасные соединения (TLS):
- Пакет:
crypto/tls
. - Назначение: реализация протокола TLS (ранее SSL), который является основой для HTTPS и других защищенных сетевых протоколов.
- Пакет:
Ключевое правило: никогда не создавайте собственные криптографические алгоритмы. Всегда используйте проверенные реализации из стандартной библиотеки или авторитетных сторонних библиотек.