Aller au contenu

Logiciel / Guide pratique

Vérifier des fichiers avec PowerShell : SHA-256 et les bons octets

Un exercice PowerShell reproductible : créer un fichier test, calculer SHA-256, comparer les fins de ligne et interpréter correctement les résultats. Avec un PDF.

D’une commande à une observation reproductible

Une commande est utile en cours lorsque l’observation attendue est claire à l’avance. Cet exercice reprend une partie de mon support « PowerShell verstehen » : créer un petit fichier connu, examiner son condensat, puis ne changer que la fin de ligne. On relie ainsi la somme de contrôle aux octets réellement stockés.

Les exemples visent PowerShell 7. Ils ne nécessitent ni droits administrateur, ni scripts externes, ni modification de la politique d’exécution. Ils créent un dossier d’exercice au nom aléatoire dans le répertoire temporaire. Les fichiers restent disponibles pour vérification.

1. Créer un fichier test précisément défini

Nous écrivons exactement les trois octets ASCII de abc. Le fichier initial ne dépend ainsi pas des réglages textuels d’un éditeur.

$demoRoot = Join-Path ([IO.Path]::GetTempPath()) (
    'hash-demo-' + [Guid]::NewGuid().ToString('N')
)
[IO.Directory]::CreateDirectory($demoRoot) | Out-Null
$demoFile = Join-Path $demoRoot 'abc.txt'
[IO.File]::WriteAllBytes($demoFile, [byte[]](0x61, 0x62, 0x63))

Get-Item -LiteralPath $demoFile |
    Select-Object Name, Length, FullName

La longueur doit être de trois octets. Le nom du dossier change à chaque exécution. -LiteralPath traite le nom du fichier littéralement ; les crochets, par exemple, ne sont pas interprétés comme des motifs de recherche.

2. Calculer et comparer le condensat

Get-FileHash renvoie notamment l’algorithme, le condensat et le chemin. Le fichier est lu pour le calcul. L’exemple précise explicitement l’algorithme. Les détails figurent chez Microsoft pour Get-FileHash.

$actual = Get-FileHash -LiteralPath $demoFile -Algorithm SHA256
$expected = 'BA7816BF8F01CFEA414140DE5DAE2223' +
            'B00361A396177A9CB410FF61F20015AD'

$actual | Select-Object Algorithm, Hash, Path
$actual.Hash -eq $expected

La comparaison doit renvoyer True . La valeur attendue correspond à l’entrée définie à l’étape 1. Pour un téléchargement réel, je l’obtiendrais d’une source fiable. Une valeur recalculée n’est pas une référence indépendante de l’origine.

3. Ajouter uniquement une fin de ligne

Nous créons maintenant deux autres fichiers. Leur texte visible reste abc, mais leurs suites d’octets diffèrent.

$lfFile = Join-Path $demoRoot 'abc-lf.txt'
$crlfFile = Join-Path $demoRoot 'abc-crlf.txt'
[IO.File]::WriteAllBytes($lfFile, [byte[]](0x61, 0x62, 0x63, 0x0A))
[IO.File]::WriteAllBytes(
    $crlfFile, [byte[]](0x61, 0x62, 0x63, 0x0D, 0x0A)
)

Get-ChildItem -LiteralPath $demoRoot -File |
    Get-FileHash -Algorithm SHA256 |
    Select-Object Hash, Path

Trois condensats différents doivent apparaître. Les fichiers font trois, quatre et cinq octets. LF ajoute un octet, CRLF deux. Un condensat différent ne signifie donc pas à lui seul que le contenu visible a sensiblement changé.

L’encodage compte aussi pour vos fichiers texte. Windows PowerShell et les versions récentes ont des réglages par défaut différents pour plusieurs commandes textuelles. Les octets explicites évitent ces différences ici. Dans un processus textuel, choisissez consciemment l’encodage et les fins de ligne. Microsoft : encodage des caractères

4. Traiter le résultat comme un objet

$actual.Hash accède à une propriété de l’objet résultat. Le tableau affiché représente cet objet. Il n’est pas nécessaire de découper une ligne d’écran selon les espaces pour comparer la valeur. C’est un avantage pratique du pipeline PowerShell.

$actual | Get-Member
$actual.Hash.Length

La valeur hexadécimale doit comporter 64 caractères. Je ne formaterais l’affichage qu’à la fin. Après des commandes de formatage, on ne manipule plus les mêmes propriétés métier que dans l’objet résultat initial.

Comment j’examinerais les différences

Je contrôlerais d’abord le chemin complet : a-t-on lu le bon fichier ? Puis sa taille, ses fins de ligne, son encodage et éventuellement un nouvel export. Un fichier peut aussi changer entre deux contrôles : il faut donc noter l’heure et la version.

Cet exercice utilise des fichiers test connus. Il ne parcourt pas les dossiers de travail et ne modifie aucun fichier existant. En cours, notez avant chaque étape la longueur ou propriété attendue, puis comparez. Une attente erronée révèle utilement une hypothèse encore floue.

Vérification de cette version

Les quatre blocs ont été exécutés ensemble le 18 septembre 2026 avec PowerShell 7.6.6 sur un Mac Apple Silicon. La comparaison du condensat de abc a renvoyé True; les fichiers faisaient trois, quatre et cinq octets, avec trois valeurs SHA-256 différentes. Le condensat hexadécimal comportait 64 caractères. Cela documente cette exécution précise ; les autres systèmes n’ont pas été testés séparément pour cette version.

Que peut-on en conclure ?

Nous avons obtenu le condensat attendu pour une suite d’octets définie et constaté que l’ajout de fins de ligne produit d’autres valeurs. Cette observation est concrète et reproductible. Elle ne vérifie ni les logiciels malveillants, ni l’auteur, ni l’exactitude du fond.

Le contexte est expliqué dans Comprendre SHA-256. La confidentialité et l’origine conduisent ensuite au chiffrement et aux signatures numériques.

Édition de lecture / Version 1.0

Lire et conserver en PDF

Un exercice sur SHA-256, les fins de ligne et les objets résultats. L’édition compacte contient le texte, les exemples et les sources. Les éléments interactifs restent dans la version web.

Télécharger le PDF · 3 pages · 78 Ko DE

Raphael Lugmayr · 18 septembre 2026 · Version 1.0. Pour les recommandations et références, utilisez cette page, qui contient aussi les révisions et ressources complémentaires.

Somme de contrôle de cette édition PDF

SHA-256 compare les octets téléchargés avec cette édition. Un condensat sur le même site ne confirme pas indépendamment l’origine.

14807330d07c918570ecdd8fdd815f74f1cf443fea3caf706aba96aea10ed596

Tous les guides et ressources

Sources et approfondissement

  1. Microsoft: Get-FileHash
  2. Microsoft : encodage des caractères dans PowerShell
  3. Microsoft : pipelines d’objets dans PowerShell

Projets associés

belegwerk

Pour poursuivre

  1. Logiciel / Guide pratique / 5 min

    Comprendre SHA-256 : des octets au condensat

    Pourquoi un condensat SHA-256 comporte 64 caractères hexadécimaux, le rôle des octets et ce que démontre une somme de contrôle. Avec exemples, démonstration et PDF.

Accès rapide / Les archives

Points de départ