Jump to content

ConvertTo-SecureString : Die Eingabezeichenfolge hat das falsche Format


Direkt zur Lösung Gelöst von ineedhelp,
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Geschrieben

Hallo.

 

Ich habe mir folgendes PowerShell-Skript "zusammengebastelt" und bekomme bei der Ausführung den Fehler: "ConvertTo-SecureString : Die Eingabezeichenfolge hat das falsche Format."

 

Class Crypt
{
    # Ohne den winzigen Anpassungen ist der Quellcode hier zu finden ->
    # Link: http://get-powershell.com/post/2008/12/13/Encrypting-and-Decrypting-Strings-with-a-Key-in-PowerShell.aspx
    Static [System.String]DecryptData([System.Byte[]]$Key, [System.String]$Data)
    {
        [System.String]$plainText = [System.String]::Empty

        $Data |
            ConvertTo-SecureString -key $Key |

            ForEach-Object {
                $plainText = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($PSItem))
            }

        return $plaintext
    }
    
    Static [System.Byte[]]GenerateKey([System.String]$string)
    {
        [System.Text.ASCIIEncoding]$encoding = New-Object -TypeName System.Text.ASCIIEncoding
        return $encoding.GetBytes($string.PadRight(32, "0"))
    }

    Static [System.String]EncryptData([System.Byte[]]$Key, [System.String]$Text)
    {
        [System.Security.SecureString]$secureString = New-Object -TypeName System.Security.SecureString

        [System.Char[]]$chars = $Text.ToCharArray()
        foreach ($char in $chars) {
            $secureString.AppendChar($char)
        }

        [System.String]$encryptedData = ConvertFrom-SecureString -SecureString $secureString -Key $Key
        return $encryptedData
    }
}

#region === Test ===
Class Configuration
{
    [System.String]$MySqlHost      = [System.String]::Empty
    [System.String]$BackupUserName = [System.String]::Empty
    [System.String]$BackupUserPSW  = [System.String]::Empty
    [System.String]$BackupLocation = [System.String]::Empty
    [ValidateRange(1,30)]
    [System.Int16]$RetentionTime   = 14
    Hidden[System.Byte[]]$Key      = [Crypt]::GenerateKey("dakfjadlkdf3")

    ScriptConfiguration()
    {
    }

    [void]Load([System.String]$Path)
    {
        if ( -not(Test-Path $Path) )
        {
            throw "Datei existiert nicht."
        }

        Get-Content -Path $Path |
            ForEach-Object{     
                [System.String[]]$line = [System.Text.RegularExpressions.Regex]::Split($PSItem, "=")
                if ( ($line[0].CompareTo("") -ne 0) -and ($line[0].StartsWith("[") -ne $true) )
                {
                    switch ($($line[0].Trim()))
                    {
                        "mysql_host"      { $this.MySqlHost      = $($line[1].Trim()) }
                        "backup_dir"      { $this.BackupLocation = $($line[1].Trim()) }
                        "backupuser_name" { $this.BackupUserName = $($line[1].Trim()) }
                        "backupuser_psw"  { $this.BackupUserPSW  = $($line[1].Trim()) }
                        "retention_time"  { $this.RetentionTime  = $($line[1].Trim()) }
                    }
                }
            }
    }

    [void]Save([System.String]$Path)
    {
        [System.IO.FileInfo]$OutFile = New-Item -Path $Path -ItemType File -Force
        Add-Content -Path $OutFile -Value "[mysqlbackup]"
        Add-Content -Path $OutFile -Value "mysql_host      = $($this.MySqlHost)"
        Add-Content -Path $OutFile -Value "backup_dir      = $($this.BackupLocation)"
        Add-Content -Path $OutFile -Value "backupuser_name = $($this.BackupUserName)"
        Add-Content -Path $OutFile -Value "backupuser_psw  = $($this.BackupUserPSW)"
        Add-Content -Path $OutFile -Value "retention_time  = $($this.RetentionTime)"
    }
}

[Configuration]$Config = New-Object -TypeName Configuration
$Config.MySqlHost        = "localhost"
$Config.BackupLocation   = "C:\BackUps"
$Config.BackupUserName   = "backuser"
$Config.BackupUserPSW    = [Crypt]::EncryptData($Config.Key, "123")
$Config.RetentionTime    = "7"
"Vor der Speicherung"
"Kennwort verschluesselt: $($Config.BackupUserPSW)"
"Kennwort entschluesselt: $([Crypt]::DecryptData($Config.Key, $Config.BackupUserPSW))"

$Config.Save("C:\Test\mysqlbackup.cfg")

"Nach der Speicherung"
$Config.Load("C:\Test\mysqlbackup.cfg")
"Kennwort verschluesselt: $($Config.BackupUserPSW)"
"Kennwort entschluesselt: $([Crypt]::DecryptData($Config.Key, $Config.BackupUserPSW))"
#endregion === Test ===

 

Die Ausgabe sieht wie folgt aus:

 

Vor der Speicherung
Kennwort verschluesselt: 76492d1116743f0423413b16050a5345MgB8AGsASAAwAE0ATgBqAG4AWQBKADQAbwAzAEgAYQBUAFAAOABFAGsANgByAEEAPQA9AHwAYgA1ADYANgAwADUAZQBkADQAMgBjADUAYgA5ADUAYQA1ADUAZAA0AGMAMAA2ADUANgA0AGEANgAwAGYAMQBmAA==
Kennwort entschluesselt: 123
Nach der Speicherung
Kennwort verschluesselt: 76492d1116743f0423413b16050a5345MgB8AGsASAAwAE0ATgBqAG4AWQBKADQAbwAzAEgAYQBUAFAAOABFAGsANgByAEEAPQA9AHwAYgA1ADYANgAwADUAZQBkADQAMgBjADUAYgA5ADUAYQA1ADUAZAA0AGMAMAA2ADUANgA0AGEANgAwAGYAMQBmAA
ConvertTo-SecureString : Die Eingabezeichenfolge hat das falsche Format.
In Zeile:10 Zeichen:13
+             ConvertTo-SecureString -key $Key |
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertTo-SecureString], FormatException
    + FullyQualifiedErrorId : System.FormatException,Microsoft.PowerShell.Commands.ConvertToSecureStringCommand
 
Kennwort entschluesselt: 

 

Warum schneidet PowerShell die letzten Zeichen bei der Speicherung ab? Liegt es an der Codierung der Textdatei? Wie kann ich es lösen? Ich möchte nicht einfach die fehlenden Zeichen an die Zeichenfolge ranhängen.

 

VIelen Dank im Voraus.

Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...