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

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.

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

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...