đĄïž Security
Commandes essentielles pour la génération de secrets, tokens, clés et autres opérations cryptographiques.
Ces commandes sont indispensables pour gĂ©nĂ©rer des secrets sĂ©curisĂ©s : clĂ©s JWT, tokens dâAPI, mots de passe, etc.
Génération de secrets
OpenSSL
La méthode la plus courante et fiable pour générer des secrets aléatoires.
# Générer 32 bytes en hexadécimal (64 caractÚres) - idéal pour JWT secrets
openssl rand -hex 32
# Générer 64 bytes en hexadécimal (128 caractÚres)
openssl rand -hex 64
# GĂ©nĂ©rer en base64 (plus court, mĂȘme entropie)
openssl rand -base64 32
# Générer un nombre spécifique de bytes bruts
openssl rand 32
# Sauvegarder directement dans un fichier
openssl rand -hex 32 > secret.key
# Générer et copier dans le presse-papier (Linux avec xclip)
openssl rand -hex 32 | xclip -selection clipboard
# Générer et copier dans le presse-papier (macOS)
openssl rand -hex 32 | pbcopyTaille recommandée : 32 bytes (256 bits) est le minimum recommandé pour les secrets cryptographiques modernes (JWT, encryption keys, etc.).
Cas dâusage courants
JWT Secret
# Secret pour JWT (256 bits minimum)
openssl rand -hex 32
# Exemple de sortie : a1b2c3d4e5f6...
# Pour .env
echo "JWT_SECRET=$(openssl rand -hex 32)" >> .envAlternatives Ă OpenSSL
/dev/urandom (Linux/macOS)
# Lire des bytes aléatoires et convertir en hex
head -c 32 /dev/urandom | xxd -p -c 256
# Avec od
head -c 32 /dev/urandom | od -An -tx1 | tr -d ' \n'
# En base64
head -c 32 /dev/urandom | base64Python
# One-liner Python pour générer un secret hex
python3 -c "import secrets; print(secrets.token_hex(32))"
# En base64
python3 -c "import secrets; print(secrets.token_urlsafe(32))"Node.js
# One-liner Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# En base64
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"UUID
# Générer un UUID v4 (Linux)
uuidgen
# Avec Python
python3 -c "import uuid; print(uuid.uuid4())"
# Avec Node.js
node -e "console.log(require('crypto').randomUUID())"Hachage
Générer des hash
# SHA-256
echo -n "mon_texte" | openssl dgst -sha256
# SHA-512
echo -n "mon_texte" | openssl dgst -sha512
# MD5 (â ïž obsolĂšte, ne pas utiliser pour la sĂ©curitĂ©)
echo -n "mon_texte" | openssl dgst -md5
# Hash d'un fichier
openssl dgst -sha256 fichier.txt
sha256sum fichier.txtBcrypt (pour mots de passe)
# Avec htpasswd (Apache utils)
htpasswd -bnBC 10 "" "mon_password" | tr -d ':\n'
# Avec Python
python3 -c "import bcrypt; print(bcrypt.hashpw(b'mon_password', bcrypt.gensalt()).decode())"Chiffrement de fichiers
Chiffrer/Déchiffrer avec AES-256
# Chiffrer un fichier (demande un mot de passe)
openssl enc -aes-256-cbc -salt -pbkdf2 -in fichier.txt -out fichier.enc
# Déchiffrer
openssl enc -aes-256-cbc -d -pbkdf2 -in fichier.enc -out fichier.txt
# Chiffrer avec une clé spécifique
openssl enc -aes-256-cbc -salt -pbkdf2 -in fichier.txt -out fichier.enc -k "ma_cle_secrete"GPG
# Chiffrer avec un mot de passe symétrique
gpg -c fichier.txt
# Déchiffrer
gpg fichier.txt.gpg
# Chiffrer pour un destinataire (clé publique)
gpg -e -r destinataire@email.com fichier.txtBonnes pratiques
Ne jamais faire :
- Utiliser
$RANDOMde Bash pour des secrets - Utiliser MD5 ou SHA1 pour des mots de passe
- Hardcoder des secrets dans le code
- Commiter des secrets dans Git
Toujours faire :
- Utiliser des sources dâentropie cryptographiques (
/dev/urandom,openssl rand,secretsen Python) - Stocker les secrets dans des variables dâenvironnement ou un gestionnaire de secrets
- Utiliser au minimum 256 bits (32 bytes) pour les clés cryptographiques
- Utiliser bcrypt, argon2 ou scrypt pour hasher les mots de passe
Quick Reference
| Usage | Commande |
|---|---|
| JWT Secret | openssl rand -hex 32 |
| API Key | openssl rand -hex 20 |
| Password | openssl rand -base64 24 |
| UUID | uuidgen |
| AES-256 Key | openssl rand -hex 32 |
| IV (16 bytes) | openssl rand -hex 16 |