Private/NewCryptographyKey.ps1
<#
.SYNOPSIS Generates a random cryptography key. .DESCRIPTION Generates a random cryptography key based on the desired key size. .PARAMETER Algorithm Algorithm to generate key for. .PARAMETER KeySize Number of bits the generated key will have. .PARAMETER AsPlainText Returns a String instead of SecureString. .OUTPUTS System.Security.SecureString. New-CryptographyKey return the key as a SecureString by default. System.String. New-CryptographyKey will return the key in plain text as a string if the -AsPlainText parameter is specified. .EXAMPLE $key = New-CryptographyKey This example generates a random 256-bit AES key and stores it in the variable $key. .NOTES Author: Tyler Siegrist Date: 9/22/2017 #> function NewCryptographyKey() { [CmdletBinding()] [OutputType([System.Security.SecureString])] [OutputType([String], ParameterSetName='PlainText')] Param( [Parameter(Mandatory=$false, Position=1)] [ValidateSet('AES','DES','RC2','Rijndael','TripleDES')] [String]$Algorithm='AES', [Parameter(Mandatory=$false, Position=2)] [Int]$KeySize, [Parameter(ParameterSetName='PlainText')] [Switch]$AsPlainText ) Process { try { $Crypto = [System.Security.Cryptography.SymmetricAlgorithm]::Create($Algorithm) if($PSBoundParameters.ContainsKey('KeySize')){ $Crypto.KeySize = $KeySize } $Crypto.GenerateKey() if($AsPlainText) { return [System.Convert]::ToBase64String($Crypto.Key) } else { return [System.Convert]::ToBase64String($Crypto.Key) | ConvertTo-SecureString -AsPlainText -Force } } catch { Write-Error $_ } } } |