AES - Verschlüsselung

Alle anderen Themen ...

Moderator: ModerationP

AES - Verschlüsselung

Beitragvon Fennek » 19. Nov 2020, 18:13

Hallo,

Nach nachhaltigem Umschreiben einer Vorlage ermöglicht der Powershell-Code einen String (oder Datei) mit AES zu verschlüsseln. Der Teil der Entschlüsselung müßte einmal an den Empfänger geschickt werden, danach reicht es den Schlüssel sicher zu übertragen.

Code: Alles auswählen
$payload = 'This is a test! This is a test!'

#$codebytes = [System.IO.File]::ReadAllBytes($infile)
$codebytes = $payload.ToCharArray()
#$codebytes
$paddingmode = 'PKCS7'
$ciphermode = 'CBC'
$keysize = 256
$compressiontype = 'Gzip'
[System.IO.MemoryStream] $output = New-Object System.IO.MemoryStream
$compressionStream = New-Object System.IO.Compression.GzipStream $output, ([IO.Compression.CompressionMode]::Compress)
$compressionStream.Write( $codebytes, 0, $codebytes.Length )
$compressionStream.Close()
$output.Close()
$compressedBytes = $output.ToArray()
#$compressedBytes

# generate key
$aesManaged = New-Object "System.Security.Cryptography.AesManaged"
$aesManaged.Mode = [System.Security.Cryptography.CipherMode]::CBC
$aesManaged.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7
$aesManaged.BlockSize = 128
$aesManaged.KeySize = 256
$aesManaged.GenerateKey()
$b64key = [System.Convert]::ToBase64String($aesManaged.Key)
$b64key

# encrypt
$encryptor = $aesManaged.CreateEncryptor()
$encryptedData = $encryptor.TransformFinalBlock($compressedBytes, 0, $compressedBytes.Length);
[byte[]] $fullData = $aesManaged.IV + $encryptedData
$aesManaged.Dispose()
$b64encrypted = [System.Convert]::ToBase64String($fullData)
$b64encrypted

###########################################################

# decrypt
$cfii = [System.Convert]::FromBase64String($b64key)
$vcqw = New-Object "System.Security.Cryptography.AesManaged"
$payload_b64 = $b64encrypted
$hctqdvb = [System.Convert]::FromBase64String($payload_b64)
$vcqw.BlockSize = 128
$vcqw.Padding = [System.Security.Cryptography.PaddingMode]::PKCS7
$vcqw.Mode = [System.Security.Cryptography.CipherMode]::CBC
$vcqw.KeySize = 256
$vcqw.Key = $cfii
$vcqw.IV = $hctqdvb[0..15]
$yitexde = New-Object System.IO.MemoryStream(,$vcqw.CreateDecryptor().TransformFinalBlock($hctqdvb,16,$hctqdvb.Length-16))
$rosvmap = New-Object System.IO.MemoryStream
$bweg = New-Object System.IO.Compression.GzipStream $yitexde, ([IO.Compression.CompressionMode]::Decompress)
$bweg.CopyTo($rosvmap)
$vcqw.Dispose()
$yitexde.Close()
$korri = [System.Text.Encoding]::UTF8.GetString($rosvmap.ToArray())
$bweg.Close()
#Invoke-Expression($korri)
$korri
Write-Host '--------------------------------------'


Falls jemand den fertigen Programmen wie PGP mißtraut, könnte so ein "low-level" Ansatz helfen.

Um eine Datei zu verschlüsseln muss diese Zeile aktiviert (das Kommentarzeichen # entfernt) und der Dateiname eingetragen werden.

#$codebytes = [System.IO.File]::ReadAllBytes($infile)

mfg
Benutzeravatar
Fennek
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 824
Registriert: 12. Feb 2016, 18:56

Zurück zu Offtopic (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast