Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Frage zu RandomBinary() (aus dem DEC) (https://www.delphipraxis.net/115938-frage-zu-randombinary-aus-dem-dec.html)

andyk77 20. Jun 2008 09:54


Frage zu RandomBinary() (aus dem DEC)
 
Hallo.

Ich habe ein kleines Programm zur Verschlüsselung von Strings geschrieben. Dazu habe ich die Funktionen des DEC verwendet. Die Verschlüsselung an sich funktioniert auch. Allerdings habe ich das Phänomen, dass die Funktion
Delphi-Quellcode:
Salt := RandomBinary(16);
bei jedem Programmstart die gleichen Ergebnisse liefert. Ich starte also das Programm, starte die Verschlüsselung und erhalte als Ergebnis von RandomBinary(16) fŠ'#$A'«È½üt³'#$C'\¦]÷±^. Wenn ich jetzt weitere Strings verschlüssele kommen erwartungsgemäß auch andere Wert bei dem Aufruf von RandomBinary(16). Benende ich nun mein Programm und starte es neu ist das Ergebnis von RandomBinary(16) identisch zu dem, was bei dem letzten Programmstart ausgegeben wurde (fŠ'#$A'«È½üt³'#$C'\¦]÷±^). Auch die Reihenfolge der weiteren Ergebnisse ist identisch zu dem vorherigen Programmstart.

Ist das die normale Funktionsweise, oder muss ich noch irgendwas anderes berücksichtigen.

BlueStarHH 3. Aug 2009 15:07

Re: Frage zu RandomBinary() (aus dem DEC)
 
Dieses Verhalten konnte ich eben auch beobachten. Ist absichtlich gewollt, dass beim Programmstart immer die selbe Zufallszahl und dann die selbe Reihenfolge produziert wird? Eigentlich müsste das doch zufällig sein. Zum Verschlüsseln nehme ich den Beispielcode, der beim DEC in der Datei Example.txt mitgelieft wird. Siehe unten. Dieser nutzt RandomBinary und produziert daher immer die selben verschlüsselten Ergebnisse.

Delphi-Quellcode:
function Encrypt(const AText: String; const APassword: String): String; overload;
var
  ASalt: Binary;
  AData: Binary;
  APass: Binary;
begin
  with ValidCipher(ACipherClass).Create, Context do
  try
    ASalt := RandomBinary(16);
    APass := ValidHash(AHashClass).KDFx(APassword[1], Length(APassword) * SizeOf(APassword[1]), ASalt[1], Length(ASalt), KeySize, TFormat_Copy, AKDFIndex);
    Mode := ACipherMode;
    Init(APass);
    SetLength(AData, Length(AText) * SizeOf(AText[1]));
    Encode(AText[1], AData[1], Length(AData));
    Result := ValidFormat(ATextFormat).Encode(ASalt + AData + CalcMAC);
  finally
    Free;
    ProtectBinary(ASalt);
    ProtectBinary(AData);
    ProtectBinary(APass);
  end;
end;

Die Muhkuh 3. Aug 2009 15:15

Re: Frage zu RandomBinary() (aus dem DEC)
 
Habt ihr Hagen's Kommentar gelesen?

Delphi-Quellcode:
// Random Buffer/Binary, ATTENTION! standard Random Function aren't
// crytographicaly secure, please include DECRandom to install secure PRNG
Den sollte man auch gelesen haben, steht in DECRandom.pas Zeile 78:

Delphi-Quellcode:
// initalize a non-repeatable Seed based on Timers,
    // ATTENTION! this way isn't secure inpredictable,
    // the user should call RandomSeed(Data, SizeOf(Data)) instead,
    // where Date contains as example collected informations based on Human inputs.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz