610 generer identifiants empreintes
Générer des identifiants et des empreintes
uuid : identifiants UUID
uuid4() produit un UUID aléatoire ; UUID(text) analyse un identifiant existant. uuid5(namespace, name) produit un identifiant déterministe à partir d'un espace de noms et d'un nom.
import uuid
identifier = uuid.uuid4()
print(str(identifier))
print(uuid.UUID(str(identifier)) == identifier) # True
Un UUID fournit un identifiant avec un risque de collision extrêmement faible. Il ne représente pas, à lui seul, une autorisation d'accès.
Parallèle C# et .NET
Guid identifier = Guid.NewGuid();
Console.WriteLine(identifier.ToString());
Console.WriteLine(Guid.Parse(identifier.ToString()) == identifier); // True
Guid.NewGuid() correspond au besoin d’un UUID aléatoire de version 4 sur les plateformes prises en charge. Guid.Parse() et TryParse() lisent les représentations textuelles. Le runtime .NET 8 n’expose pas de méthode native équivalente à uuid5() ; les UUID déterministes exigent une implémentation ou une bibliothèque adaptée.
secrets : valeurs aléatoires pour les secrets
| Fonction | Usage |
|---|---|
token_hex(nbytes) |
Jeton hexadécimal. |
token_urlsafe(nbytes) |
Jeton adapté aux URL. |
token_bytes(nbytes) |
Octets aléatoires. |
choice(sequence) |
Sélection sécurisée. |
randbelow(n) |
Entier aléatoire strictement inférieur à n. |
compare_digest(a, b) |
Comparaison conçue pour limiter les fuites temporelles. |
Pour un jeton d'accès réel, transmettons-le uniquement au destinataire concerné et évitons de le journaliser. secrets répond aux besoins de sécurité que random ne couvre pas.
Parallèle C# et .NET
byte[] bytes = RandomNumberGenerator.GetBytes(32);
string token = Convert.ToBase64String(bytes).TrimEnd('=').Replace('+', '-').Replace('/', '_');
Console.WriteLine(token.Length); // 43
int number = RandomNumberGenerator.GetInt32(100); // De 0 à 99
bool same = CryptographicOperations.FixedTimeEquals(bytes, bytes.ToArray());
Console.WriteLine(same); // True
RandomNumberGenerator répond au besoin d’aléatoire cryptographique. La conversion construit ici du Base64 URL sans remplissage, proche de token_urlsafe(). FixedTimeEquals() compare des octets ; les conditions exactes, notamment les longueurs, comptent. Les jetons ne doivent pas être confondus avec des UUID ni exposés dans les journaux.
hashlib : empreintes de données
sha256() et sha512() construisent des objets de hachage. update() ajoute des octets ; digest() fournit l'empreinte binaire et hexdigest() sa représentation hexadécimale.
import hashlib
message = "Bonjour Python".encode("utf-8")
fingerprint = hashlib.sha256(message).hexdigest()
print(len(fingerprint)) # 64
Une empreinte sert notamment à comparer des contenus. Elle ne chiffre pas les données et ne prouve pas leur origine. Un simple SHA-256 n'est pas adapté au stockage des mots de passe ; utilisons un mécanisme dédié de dérivation de clé. Pour authentifier un message avec une clé partagée, le module hmac répond à un autre besoin.
Parallèle C# et .NET
byte[] message = Encoding.UTF8.GetBytes("Bonjour Python");
byte[] digest = SHA256.HashData(message);
string fingerprint = Convert.ToHexString(digest).ToLowerInvariant();
Console.WriteLine(fingerprint.Length); // 64
SHA256.HashData() fournit une empreinte en un appel. IncrementalHash permet l’alimentation progressive comparable à update(). Pour les mêmes octets, les empreintes SHA-256 sont identiques entre les deux environnements. L’encodage du texte doit donc être choisi explicitement. Le hachage cryptographique diffère de GetHashCode() et de hash() Python.