diff --git a/Create-AesKey.ps1 b/Create-AesKey.ps1 new file mode 100644 index 0000000..7b4361d --- /dev/null +++ b/Create-AesKey.ps1 @@ -0,0 +1,54 @@ +function Create-AesManagedObject($key, $IV) { + # I grabbed this from somewhere. Google it for attribution ;P + $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) +} + +$key = Create-AesKey +$key