PowerShell.PowerLibrary.Encryption.psm1

#region ConvertTo-AesEncrypted
FUNCTION ConvertTo-AesEncrypted
{
    <#
    .Synopsis
        Encrypt String Value to AES Managed
    .DESCRIPTION
        Use this method to Encrypt any input value.
    .PARAMETER InputValue
        Any Non Null Value String
    .EXAMPLE
        $Password = ConvertTo-AesEncrypted 'test' 'vector' 'salt'
    #>


    param
    (
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
        [string]
        $InputValue,
        
        [ValidateLength(16, 16)]
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 1)]
        [string]
        $Vector,

        [ValidateLength(16, 16)]
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 2)]
        [string]
        $Salt
    );

    $VectorBytes = [System.Text.Encoding]::ASCII.GetBytes($Vector);
    $SaltBytes = [System.Text.Encoding]::ASCII.GetBytes($Salt);

    $aesManaged = [System.Security.Cryptography.AesManaged]::new();
    $aesManaged.Key = $SaltBytes;
    $aesManaged.IV= $VectorBytes
    $encryptor = $aesManaged.CreateEncryptor($aesManaged.Key, $aesManaged.IV);
    $MemoryStream = [System.IO.MemoryStream]::new();
    $CryptoStream= [System.Security.Cryptography.CryptoStream]::new($MemoryStream, $encryptor, [System.Security.Cryptography.CryptoStreamMode]::Write);
    $StreamWriter = [System.IO.StreamWriter]::new($CryptoStream);
    $StreamWriter.Write($InputValue);
    $StreamWriter.Dispose();
    $StreamWriter = $null;
    $encrypted = $MemoryStream.ToArray();
    $CryptoStream.Dispose();
    $CryptoStream = $null;
    $MemoryStream.Dispose();
    $MemoryStream = $null;
    $aesManaged.Dispose();
    $aesManaged = $null;

    $InputValue = [System.Convert]::ToBase64String($encrypted);

    RETURN $InputValue;
}
#endregion

#region ConvertFrom-AesEncrypted
FUNCTION ConvertFrom-AesEncrypted
{
    <#
    .Synopsis
        Decrypt String Value From AES Managed
    .DESCRIPTION
        Use this method to Decrypt any input value.
    .PARAMETER InputValue
        Any Non Null Value String
    .EXAMPLE
        $Password = ConvertFrom-AesEncrypted 'test' 'vector' 'salt'
    #>


    param
    (
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
        [string]
        $InputValue,
        
        [ValidateLength(16, 16)]
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 1)]
        [string]
        $Vector,

        [ValidateLength(16, 16)]
        [ValidateNotNullOrEmpty()]
        [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 2)]
        [string]
        $Salt
    );

    $VectorBytes = [System.Text.Encoding]::ASCII.GetBytes($Vector);
    $SaltBytes = [System.Text.Encoding]::ASCII.GetBytes($Salt);
    $encrypted  = [System.Convert]::FromBase64String($InputValue);

    $aesManaged = [System.Security.Cryptography.AesManaged]::new();
    $aesManaged.Key = $SaltBytes;
    $aesManaged.IV= $VectorBytes
    $decryptor = $aesManaged.CreateDecryptor($aesManaged.Key, $aesManaged.IV);
    $MemoryStream = [System.IO.MemoryStream]::new($encrypted);
    $CryptoStream = [System.Security.Cryptography.CryptoStream]::new($MemoryStream, $decryptor, [System.Security.Cryptography.CryptoStreamMode]::Read);
    $StreamReader = [System.IO.StreamReader]::new($CryptoStream);
    $InputValue = $StreamReader.ReadToEnd();
    $StreamReader.Dispose();
    $StreamReader = $null;
    $CryptoStream.Dispose();
    $CryptoStream = $null;
    $MemoryStream.Dispose();
    $MemoryStream = $null;
    $aesManaged.Dispose();
    $aesManaged = $null;

    RETURN $InputValue;
}
#endregion