Skip to content

Instantly share code, notes, and snippets.

@karoltheguy
Created September 19, 2018 22:14
Show Gist options
  • Save karoltheguy/7e132e0fcd782a729ec6fdd8eacb68fa to your computer and use it in GitHub Desktop.
Save karoltheguy/7e132e0fcd782a729ec6fdd8eacb68fa to your computer and use it in GitHub Desktop.
TripleDES encode-decode in powershell
$TDESKEY = 'fhEzg3Svho6nMYPcyCnEJc4qVRTkGY82'
##ENCODE
$password = "Im a password"
$MS = New-Object System.IO.MemoryStream
$keyb = [Convert]::FromBase64String($TDESKEY)
$TD = New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider
$CS = New-Object System.Security.Cryptography.CryptoStream($MS,$TD.CreateEncryptor($keyb, $TD.IV), [System.Security.Cryptography.CryptoStreamMode]::Write)
$Writer = New-Object System.IO.StreamWriter($CS)
$Writer.Write($password)
$Writer.Flush()
$CS.FlushFinalBlock()
#$MS.Seek(0, [System.IO.SeekOrigin]::Begin) > NULL #not sure of its utility
$EncodedText = [Convert]::ToBase64String($MS.ToArray())
$IVS = [Convert]::ToBase64String($TD.IV)
$EncryptedData = "${IVS}:$EncodedText"
$Writer.Dispose()
$EncryptedData
##DECODE
$Data = $EncryptedData.Split(':')
$TD = New-Object System.Security.Cryptography.TripleDESCryptoServiceProvider
$Key = [Convert]::FromBase64String($TDESKEY)
$IV = [Convert]::FromBase64String($Data[0])
$DataByte = [Convert]::FromBase64String($Data[1])
$MS = New-Object System.IO.MemoryStream(,$DataByte) #array of one item must have a preceding coma
$CS = New-Object System.Security.Cryptography.CryptoStream($MS,$TD.CreateDecryptor($Key,$IV), [System.Security.Cryptography.CryptoStreamMode]::Read)
$Reader = New-Object System.IO.StreamReader($CS)
$Result = $Reader.ReadToEnd()
$Reader.Dispose()
$Result
@CuddleMuffin
Copy link

Hi Carol, I'm new to Powershell. This is very helpful! But can I ask how to generate the $TDESKEY ? Appreciate your help!

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