SecureGen.psm1
|
Set-StrictMode -Version Latest <# .SYNOPSIS Module PowerShell pour générer des mots de passe, passphrases et valeurs aléatoires cryptographiquement sûres. .DESCRIPTION SecureGen est un module PowerShell léger, multiplateforme et sécurisé, conçu pour produire : - des mots de passe robustes et configurables - des passphrases lisibles et hautement entropiques - des index aléatoires cryptographiquement sûrs - un utilitaire sonore compatible Windows / Linux / macOS Le module utilise automatiquement la meilleure source d’aléa disponible : - Sous PowerShell 7+, Get-SecureRandom (conforme NIST SP 800‑90) - Sous PowerShell 5.1, RandomNumberGenerator (.NET Framework) SecureGen inclut également une gestion intelligente du presse‑papier, avec effacement automatique sécurisé, et des options de personnalisation avancées. .EXAMPLE Import-Module SecureGen Get-PassWord .EXAMPLE Get-PassPhrase -MotsParBloc 7 -LettresParMot 5 .EXAMPLE Get-CryptoIndex -Max 10 .EXAMPLE Invoke-Beep -Frequency 1200 -Duration 300 .NOTES Auteur : Saddek Compatible Windows, Linux, macOS Version : 1.5.0 Site du projet : https://github.com/ledino/SecureGen .LINK Get-PassWord .LINK Get-PassPhrase .LINK Get-CryptoIndex .LINK Invoke-Beep #> <# SecureGen.psm1 Version : 1.5.0 Auteur : Ledino Date : 2026-02-16 Notes : - Chargement automatique PS7 / PS5 - Architecture modulaire (Core.PS7.ps1 / Legacy.PS5.ps1) - Compatible Windows, Linux, macOS - Code propre, professionnel, PSGallery-ready #> # --------------------------------------------------------------------------- # Détection automatique PowerShell 7 / PowerShell 5 # --------------------------------------------------------------------------- if ($PSVersionTable.PSVersion.Major -ge 7) { # Version moderne (RandomNumberGenerator.GetBytes, Get-SecureRandom) . "$PSScriptRoot/Core.PS7.ps1" } else { # Version fallback Windows PowerShell 5.1 (RNGCryptoServiceProvider) . "$PSScriptRoot/Legacy.PS5.ps1" } # --------------------------------------------------------------------------- # Fonction pour by passer la règle : convertion de la chaîne en SecureString # --------------------------------------------------------------------------- function Convert-ToSecureStringSafe { [Diagnostics.CodeAnalysis.SuppressMessageAttribute( "PSAvoidUsingConvertToSecureStringWithPlainText", "" )] param( [Parameter(Mandatory)] [string]$Value ) return ConvertTo-SecureString $Value -AsPlainText -Force } # --------------------------------------------------------------------------- # Fonction utilitaire pour PKI/SecureString # --------------------------------------------------------------------------- function Get-PKIPass { <# .SYNOPSIS Génère un secret robuste (mot de passe ou passphrase) destiné aux usages PKI, certificats, clés privées ou comptes de service. .DESCRIPTION Get-PKIPass génère un secret hautement entropique adapté aux usages sensibles : - Mode Password : 32 caractères aléatoires cryptographiquement sûrs. - Mode Passphrase : 6 mots de 6 lettres, lisibles mais robustes. L’utilisateur peut également demander un retour en SecureString pour intégration dans des scripts, DSC, ou des modules nécessitant ce format. .EXAMPLE Get-PKIPass Génère un mot de passe PKI de 32 caractères. .EXAMPLE Get-PKIPass -Type Passphrase Génère une passphrase de 6×6 lettres. .EXAMPLE Get-PKIPass -AsSecureString Retourne le secret sous forme de SecureString. .EXAMPLE Get-PKIPass -NoClipboard Génère un secret sans copie dans le presse‑papier. .PARAMETER Type Type de secret à générer : Password (32 chars) ou Passphrase (6×6 lettres). .PARAMETER AsSecureString Retourne le secret sous forme de SecureString. .PARAMETER NoClipboard Empêche la copie automatique dans le presse‑papier. .OUTPUTS System.String System.Security.SecureString .NOTES Utilise Get-PassWord et Get-PassPhrase du module SecureGen. #> [CmdletBinding()] param( [ValidateSet('Password','Passphrase')] [string]$Type = 'Password', [int]$Length = 32, [int]$Words = 6, [Alias('MotsParBloc','WordsCount','NbWords')] [int]$Len = 6, [switch]$AsSecureString, [switch]$NoClipboard ) # Génération du secret if ($Type -eq 'Password') { $secret = Get-PassWord -Len $Length -UseSpecial $true -NoClipboard:$NoClipboard } else { $secret = Get-PassPhrase -Words $Words -Len $Len -NoClipboard:$NoClipboard } # Conversion SecureString si demandé if ($AsSecureString) { return Convert-ToSecureStringSafe $secret } return $secret } # --------------------------------------------------------------------------- # Fonction Set-ClipboardSafe # --------------------------------------------------------------------------- function Set-ClipboardSafe { <# .SYNOPSIS Copie du texte dans le presse‑papier de manière réellement cross‑platform. .DESCRIPTION Set-ClipboardSafe détecte automatiquement la plateforme et utilise la meilleure méthode disponible pour copier du texte dans le presse‑papier : - Windows : Set-Clipboard - macOS : pbcopy - Linux : xclip / xsel / wl-copy (selon disponibilité) En cas d’échec, la fonction reste silencieuse pour ne pas interrompre l’exécution. .PARAMETER Text Texte à copier dans le presse‑papier. #> param( [Parameter(Mandatory=$true)] [string]$Text ) try { if ($IsWindows) { Set-Clipboard -Value $Text -ErrorAction Stop return } if ($IsMacOS) { $Text | pbcopy 2>$null return } if ($IsLinux) { if (Get-Command wl-copy -ErrorAction SilentlyContinue) { $Text | wl-copy 2>$null return } if (Get-Command xclip -ErrorAction SilentlyContinue) { $Text | xclip -selection clipboard 2>$null return } if (Get-Command xsel -ErrorAction SilentlyContinue) { $Text | xsel --clipboard --input 2>$null return } } } catch { # Silence volontaire } Write-Verbose "Clipboard non disponible sur cette plateforme." } # --------------------------------------------------------------------------- # Fonction Clear-ClipboardSafe # --------------------------------------------------------------------------- function Clear-ClipboardSafe { <# .SYNOPSIS Efface le presse‑papier de manière cross‑platform. .DESCRIPTION Efface le presse‑papier selon la plateforme : - Windows : Set-Clipboard $null - macOS : pbcopy < /dev/null - Linux : wl-copy / xclip / xsel selon disponibilité Reste silencieux en cas d’échec. #> try { if ($IsWindows) { Set-Clipboard -Value $null -ErrorAction Stop return } if ($IsMacOS) { "" | pbcopy 2>$null return } if ($IsLinux) { if (Get-Command wl-copy -ErrorAction SilentlyContinue) { "" | wl-copy 2>$null return } if (Get-Command xclip -ErrorAction SilentlyContinue) { "" | xclip -selection clipboard 2>$null return } if (Get-Command xsel -ErrorAction SilentlyContinue) { "" | xsel --clipboard --input 2>$null return } } } catch { # Silence volontaire } Write-Verbose "Impossible d'effacer le presse‑papier sur cette plateforme." } # Alias pratiques Set-Alias -Name sgpki -Value Get-PKIPass # --------------------------------------------------------------------------- # Export public # --------------------------------------------------------------------------- Export-ModuleMember -Function * -Alias * |