Skip to content

Instantly share code, notes, and snippets.

@ctigeek
Last active May 30, 2025 11:47
Show Gist options
  • Save ctigeek/2a56648b923d198a6e60 to your computer and use it in GitHub Desktop.
Save ctigeek/2a56648b923d198a6e60 to your computer and use it in GitHub Desktop.

Revisions

  1. ctigeek revised this gist Jun 16, 2015. 1 changed file with 1 addition and 2 deletions.
    3 changes: 1 addition & 2 deletions PowershellAes.ps1
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@

    function Create-AesManagedObject($key, $IV) {
    $aesManaged = New-Object "System.Security.Cryptography.AesManaged"
    $aesManaged.Mode = [System.Security.Cryptography.CipherMode]::CBC
    @@ -47,7 +46,7 @@ function Decrypt-String($key, $encryptedStringWithIV) {
    $decryptor = $aesManaged.CreateDecryptor();
    $unencryptedData = $decryptor.TransformFinalBlock($bytes, 16, $bytes.Length - 16);
    $aesManaged.Dispose()
    [System.Text.Encoding]::UTF8.GetString($unencryptedData).Trim('\0')
    [System.Text.Encoding]::UTF8.GetString($unencryptedData).Trim([char]0)
    }

    $key = Create-AesKey
  2. ctigeek created this gist Jun 5, 2015.
    57 changes: 57 additions & 0 deletions PowershellAes.ps1
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,57 @@

    function Create-AesManagedObject($key, $IV) {
    $aesManaged = New-Object "System.Security.Cryptography.AesManaged"
    $aesManaged.Mode = [System.Security.Cryptography.CipherMode]::CBC
    $aesManaged.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
    $aesManaged.BlockSize = 128
    $aesManaged.KeySize = 256
    if ($IV) {
    if ($IV.getType().Name -eq "String") {
    $aesManaged.IV = [System.Convert]::FromBase64String($IV)
    }
    else {
    $aesManaged.IV = $IV
    }
    }
    if ($key) {
    if ($key.getType().Name -eq "String") {
    $aesManaged.Key = [System.Convert]::FromBase64String($key)
    }
    else {
    $aesManaged.Key = $key
    }
    }
    $aesManaged
    }

    function Create-AesKey() {
    $aesManaged = Create-AesManagedObject
    $aesManaged.GenerateKey()
    [System.Convert]::ToBase64String($aesManaged.Key)
    }

    function Encrypt-String($key, $unencryptedString) {
    $bytes = [System.Text.Encoding]::UTF8.GetBytes($unencryptedString)
    $aesManaged = Create-AesManagedObject $key
    $encryptor = $aesManaged.CreateEncryptor()
    $encryptedData = $encryptor.TransformFinalBlock($bytes, 0, $bytes.Length);
    [byte[]] $fullData = $aesManaged.IV + $encryptedData
    $aesManaged.Dispose()
    [System.Convert]::ToBase64String($fullData)
    }

    function Decrypt-String($key, $encryptedStringWithIV) {
    $bytes = [System.Convert]::FromBase64String($encryptedStringWithIV)
    $IV = $bytes[0..15]
    $aesManaged = Create-AesManagedObject $key $IV
    $decryptor = $aesManaged.CreateDecryptor();
    $unencryptedData = $decryptor.TransformFinalBlock($bytes, 16, $bytes.Length - 16);
    $aesManaged.Dispose()
    [System.Text.Encoding]::UTF8.GetString($unencryptedData).Trim('\0')
    }

    $key = Create-AesKey
    $key
    $unencryptedString = "blahblahblah"
    $encryptedString = Encrypt-String $key $unencryptedString
    $backToPlainText = Decrypt-String $key $encryptedString