Ein plattformübergreifender kryptografisch sicherer Pseudozufallszahlengenerator für Delphi
Ich wollte einen einfach zu verwendenden plattformübergreifenden Zufallszahlengenerator, der zuverlässiger ist als der integrierte Zufallszahlengenerator. Es ist modular aufgebaut, sodass Sie nur die gewünschten Teile hinzufügen können. Nutzt den plattformsicheren Zufallsanbieter für jede Plattform mit einer gemeinsamen Anbieterschnittstelle. Ich habe es nur auf Win32, Win64, Android64 und Linux64 getestet.
Es gibt einige grundlegende Tests und eine Beispiel-App. Offen für Feedback, Berichte und Pull-Requests. Vor allem, wenn Sie es auf Apple-Hardware testen möchten.
Haftungsausschluss : Stellen Sie sicher, dass Sie den Code verstanden haben, bevor Sie ihn für wichtige Zwecke verwenden. Nur weil ich dies „kryptografisch sicher“ nenne, heißt das nicht unbedingt, dass es sicher oder für die Kryptografie geeignet ist.
uses CSPRNG, CSPRNG.Interfaces;
// /
var rng: ICSPRNGProvider := GetCSPRNGProvider;
Writeln(rng.GetFloat);
Writeln(rng.GetUInt64);
Writeln(rng.GetBase64);
type
ICSPRNGProvider = interface
// Generates a specified number of cryptographically secure random bytes.
function GetBytes ( const Count: Integer): TBytes;
// Generates a cryptographically secure random unsigned 32-bit integer.
function GetUInt32 ( const max: UInt32 = High(UInt32)): UInt32;
// Generates a cryptographically secure random signed 32-bit integer.
function GetInt32 ( const max: Int32 = High(Int32)): Int32;
// Generates a cryptographically secure random signed 64-bit integer.
function GetInt64 ( const max: Int64 = High(Int64)): Int64;
// Generates a cryptographically secure random unsigned 64-bit integer.
function GetUInt64 ( const max: UInt64 = High(UInt64)): UInt64;
// Generates a cryptographically secure random float between 0 and 1
function GetFloat : Double;
// Generates a BASE64 encoded random string
function GetBase64 ( const len: Integer = 1024 ): String;
end ;
Der Großteil der Funktionalität stammt aus der Basisimplementierung, wobei die plattformspezifische Implementierung die GetBytes
-Funktion bereitstellt.