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.
Wie generieren Sie den Schlüssel, den Sie zum Verschlüsseln der Daten verwenden? –
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