.INI Datei verschlüsseln

  • Hey!
    Ich wollte einmal fragen, ob - und wenn ja - wie es möglich ist eine .INI Datei komplett zu verschlüsseln.
    Das Skript soll natürlich noch alle Werte korrekt lesen können, es müsste die .INI also wieder entschlüsseln.
    Gibt es eine Möglichkeit das zu realisieren?

    Vorab schon einmal vielen Dank!

    • Offizieller Beitrag

    Die INI als Datei würde ich nicht verschlüsseln - sondern die eingetragenen Parameter (Sektionsnamen, Schlüssel, Werte).
    Du kannst vom User das Passwort zum Entschlüsseln beim Programmstart anfordern und damit die Daten aus der INI entschlüsseln.
    Wenn neue Daten in die INI geschrieben werden müssen machst du das wiederum durch Interaktion mit dem User.
    Natürlich könntest du auch das Paßwort im Skript hinterlegen - aber was nützt ein Tresor, wenn der Schlüssel daneben hängt? :D

  • Mit StrinEncrypt könnte ich doch aber nur die zugehörigen Werte verschlüsseln und nicht die ganze .INI, oder sehe ich das falsch?

    • Offizieller Beitrag

    Mit StrinEncrypt könnte ich doch aber nur die zugehörigen Werte verschlüsseln und nicht die ganze .INI, oder sehe ich das falsch?

    Du könntest auch die gesamte Datei Ver-/Entschlüsseln. Dann mußt du die INI aber temporär speichern um sie dann "normal" zu lesen.

  • "Die INI als Datei würde ich nicht verschlüsseln - sondern die eingetragenen Parameter (Sektionsnamen, Schlüssel, Werte)."

    Diese Methode hört sich doch recht gut an.
    Könntest du mir evtl. ein kurzes Besipiel geben, wie ich das alles einzeln ver- und entschlüsselen kann?

    • Offizieller Beitrag

    OK, hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #Include <String.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $INI = @ScriptDir & '\Test.INI'

    [/autoit] [autoit][/autoit] [autoit]

    ; ############## Verschlüsseln ########################
    $section = 'muster_section'
    $key1 = 'BlaBla'
    $val1 = '1234'
    $key2 = 'BlubBlub'
    $val2 = '99999'

    [/autoit] [autoit][/autoit] [autoit]

    $pass = InputBox('Verschlüsseln', 'Bitte Passwort eingeben.')
    IniWriteSection($INI, _StringEncrypt(1, $section, $pass), _StringEncrypt(1, $key1, $pass) & '=' & _StringEncrypt(1, $val1, $pass) & @CRLF _
    & _StringEncrypt(1, $key2, $pass) & '=' & _StringEncrypt(1, $val2, $pass))

    [/autoit] [autoit][/autoit] [autoit]

    ; ########################################################

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ; ############## Entschlüsseln ########################
    ; Sektionsnamen lesen
    $aSections = IniReadSectionNames($INI)
    Local $aSecKeys[1][2]

    [/autoit] [autoit][/autoit] [autoit]

    ; Sektionsnamen entschlüsseln und Schlüssel-Wert-Paare auslesen
    For $i = 1 To UBound($aSections) -1
    If $aSecKeys[UBound($aSecKeys)-1][0] <> '' Then ReDim $aSecKeys[UBound($aSecKeys)+1][2]
    $aSecKeys[UBound($aSecKeys)-1][0] = _StringEncrypt(0, $aSections[$i], $pass) ; Sektionsname jetzt im Klartext
    $aSecKeys[UBound($aSecKeys)-1][1] = IniReadSection($INI, $aSections[$i]) ; 2D-Array mit noch verschlüsselten ""Key=Value"
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; im Programm ist ja der entsprechende Sektionsname bekannt
    ; zugehörige Schlüssel-Wert-Paare als einzelnes Array selektieren
    Dim $zuLesendeSektion = 'muster_section'
    Dim $aKeyVal
    For $i = 0 To UBound($aSecKeys) -1
    If $aSecKeys[$i][0] = $zuLesendeSektion Then
    $aKeyVal = $aSecKeys[$i][1]
    ExitLoop
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    ; Schlüssel-Wert-Paare entschlüsseln
    For $i = 1 To UBound($aKeyVal) -1
    $aKeyVal[$i][0] = _StringEncrypt(0, $aKeyVal[$i][0], $pass)
    $aKeyVal[$i][1] = _StringEncrypt(0, $aKeyVal[$i][1], $pass)
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($aKeyVal, 'Schlüssel-Wert-Paare')

    [/autoit]
  • Ich habe das heute in einem Post schonmal geschrieben :D
    Link ist doof deshalb habe ich mal den Post kopiert.

    Ansonsten kann man die Daten der INI-Datei auch mit _StringEncrypt verschlüsseln und zwar mit dem Passwort, das dein FTPuser hat. Somit funktioniert auch die Verschlüsselung immer.

    Werte encrypten

    Spoiler anzeigen
    [autoit]

    $passwort = _StringEncrypt(1,GUICtrlRead($in_passwort),GuiCtrlRead($in_password),"2")

    [/autoit]

    Werte decrypten

    Spoiler anzeigen
    [autoit]

    $ini_paswd = _StringEncrypt(0,IniRead($inifile, $ini_section, "passwort","NotFound"),GuiCtrlRead($in_paswd_gui_paswd),"2")

    [/autoit]

    Somit kann nicht jeder User die Daten auslesen.

    MfG
    Der_Doc

  • Schönes Script Bugfix, genau was ich grad suche.
    Hatte es nur mit verschlüsselten Werten, aber so isses natürlich besser.
    Allerdings hab ich in einer Sektion mehrere Keys, die in ein Array kommen und bin mir grad nicht sicher, wie ich das Script da anpassen muss.

    Im Moment sieht das Ganze so aus

    [autoit]

    $Ar_count = IniRead($IniFile2 , "Misc" , "Ar_count", "")
    For $i=1 to $Ar_count
    _ArrayAdd($Ar_A, _StringEncrypt(0, IniRead($IniFile2 , "Ar" , "Ar" & $i, ""), $pw, 1))
    Next

    [/autoit]

    Also verschlüsselt gekriegt hab icchs, nur beo der Schleife fürs Entschlüsseln haperts.
    Könnteste mir da helfen? THX!

    {Edit]

    OK habs hinbekommen. nur eine Sache is komisch: die Sektion mit dem Array hat ca. 700 keys. er zeigt mir aber im arraydisplay nur bis 136 an. Woran kann das liegen?

    [Edit]

    hmm hab wohl den Grund: liegt an IniReadSection
    "Nur die ersten 32767 Zeichen werden aufgrund der Win9x-Kompatibilität in einer Sektion berücksichtigt."

    Kennt jemand ne Alternative bzw. ne Möglichkeit, das zu ändern?

    dasT

    2 Mal editiert, zuletzt von dasT17 (5. November 2008 um 01:04)