2010-12-05 5 views
0

Ich verwende derzeit den RC4-Algorithmus, um Anwendungseinstellungen zu speichern, und wenn ich die Ausgabe beobachte, sieht es leicht decodierbar aus. Die Ausgabe von Strings, die mit den gleichen Buchstaben beginnen, scheint identisch zu sein.Wie kann ich die Effektivität der Verschlüsselung zum Speichern von Anwendungseinstellungen erhöhen?

Kurze Strings führen zu einer kurzen Ausgabe und längere Strings produzieren eine längere Ausgabe.

Ich bin jedoch auf der Suche nach etwas, das längere Ausgabe für kurze Saiten produzieren wird.

Gibt es einen anderen Algorithmus, der mehr ‚verschlüsselt‘ ausgegeben, auch mit kurzen Strings schaffen?

Ich mag auch mit einigen Daten den Eingangs Suffix oder Präfix, das ich leicht erkennen kann und die Streifen aus nach Decodierung mehr Zufälligkeit auf der Ausgabe zu erzeugen.

Ich habe neuen Code erstellt mit Rijndael unten angezeigt, aber es leidet immer noch unter dem gleichen Mangel an Variation in der Ausgabe. Ich vermute, dass einige zusätzliche Parameter benötigt werden, um mehr Variation in der Ausgabe, den IVs, dem Block-Padding und all dem zu erzeugen.

unit testform; 

{$mode objfpc}{$H+} 

interface 

uses 
    Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs, 
    StdCtrls, DCPrijndael, DCPsha1; 

type 

    { TForm1 } 

    TForm1 = class(TForm) 
    edtKeyString: TEdit; 
    edtInputText: TEdit; 
    edtEncryptedText: TEdit; 
    Label1: TLabel; 
    Label2: TLabel; 
    Label3: TLabel; 
    procedure edtInputTextChange(Sender: TObject); 
    private 
    { private declarations } 
    public 
    { public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{ TForm1 } 

procedure TForm1.edtInputTextChange(Sender: TObject); 
var 
    Cipher: TDCP_rijndael; 
begin 
    Cipher:= TDCP_rijndael.Create(Self); 
    Cipher.InitStr(edtKeyString.Text,TDCP_sha1); 
    edtEncryptedText.Text := Cipher.EncryptString(edtInputText.Text); 
    Cipher.Burn; 
    Cipher.Free; 
end; 

initialization 
    {$I testform.lrs} 

end. 
+0

Wie generieren Sie den Schlüssel, den Sie zum Verschlüsseln der Daten verwenden? –

+0

Bei einer Stream-Chiffre im XOR-Modus sollten Sie nur einmal ** einen Schlüssel ** verwenden. Es hat sehr ähnliche Eigenschaften wie ein One-Time-Pad. Verwenden Sie eine Blockziffer in einem geeigneten Modus. Sie sollten nur eine Stream-Chiffre verwenden, wenn Sie wissen, was Sie tun, da sie viel einfacher falsch zu verstehen sind als Block-Chiffren. – CodesInChaos

Antwort

1

RC4 ist eine Stromchiffre. Vielleicht möchten Sie sich eine Blockchiffre wie AES ansehen. Vergessen Sie nicht, Polsterung zu verwenden, z. PKCS7.

EDIT: Do nicht hinzufügen Suffix/Präfix Daten, um "mehr Zufälligkeit" zu erstellen. Der Verschlüsselungsalgorithmus wird das für Sie tun (es sei denn, es handelt sich um einen defekten Algorithmus, wählen Sie in diesem Fall einen anderen Algorithmus). Im besten Fall ist das sinnlos; Im schlimmsten Fall wird eine "Krippe" hinzugefügt, die es für jemanden einfacher macht, Ihre Verschlüsselung anzugreifen.

+0

Was benötigt wird, ist eine zufällige IV. Dies hätte auch mit RC4 geholfen, obwohl es nicht offensichtlich ist, wie man ein Salz/IV in RC4 verwendet. –

+0

Die Verwendung einer Blockchiffre beantwortet die Frage "etwas, das eine längere Ausgabe für kurze Zeichenfolgen erzeugt". Sie benötigen auch eine IV, wenn Sie sich im CBC-Modus mit einer Blockchiffre befinden. Stromverschlüsselungen verwenden keine IVs. –

+0

Ich denke, eine alternative Lösung wäre, RC4 weiter zu verwenden, aber jedes Datenstück auf eine bestimmte Größe zu packen. –