Skip to Content
CLIđŸ›Ąïž Security

đŸ›Ąïž 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 | pbcopy

Taille recommandée : 32 bytes (256 bits) est le minimum recommandé pour les secrets cryptographiques modernes (JWT, encryption keys, etc.).

Cas d’usage courants

# Secret pour JWT (256 bits minimum) openssl rand -hex 32 # Exemple de sortie : a1b2c3d4e5f6... # Pour .env echo "JWT_SECRET=$(openssl rand -hex 32)" >> .env

Alternatives Ă  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 | base64

Python

# 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.txt

Bcrypt (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.txt

Bonnes pratiques

Ne jamais faire :

  • Utiliser $RANDOM de 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, secrets en 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

UsageCommande
JWT Secretopenssl rand -hex 32
API Keyopenssl rand -hex 20
Passwordopenssl rand -base64 24
UUIDuuidgen
AES-256 Keyopenssl rand -hex 32
IV (16 bytes)openssl rand -hex 16