Skip to content

Instantly share code, notes, and snippets.

@tylerlmz1
Forked from ctigeek/PowershellAes.ps1
Created May 19, 2019 09:12
Show Gist options
  • Save tylerlmz1/fed19e0fe83db212d6ecb5d7df504651 to your computer and use it in GitHub Desktop.
Save tylerlmz1/fed19e0fe83db212d6ecb5d7df504651 to your computer and use it in GitHub Desktop.
Aes Encryption using powershell.
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([char]0)
}
$encrypt_or_decrypt = Read-Host -Prompt "encrypt or decrypt? [e/d]"
if($encrypt_or_decrypt -eq "e"){
#generate key
$key = Create-AesKey
Write-Host "key: $key"
#ask for string to encrypt
$unencryptedString = Read-Host "Encrypt this"
#encrypt it, pipe to clipboard
$encryptedString = Encrypt-String $key $unencryptedString
$encryptedString | Set-Clipboard
} elseif ($encrypt_or_decrypt -eq "d") {
#ask for encrypted string and key
$encryptedString = Read-Host "decrypt this"
$key = Read-Host "key"
#decrypt it, pipe to clipboard
try {
$backToPlainText = Decrypt-String $key $encryptedString
$backToPlainText | Set-Clipboard
} catch {
Write-Host "Invalid"
}
}
@tylerlmz1
Copy link
Author

tylerlmz1 commented May 19, 2019

19May2019:
Added interactive prompt for encryption/decryption

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment