Un generador de números pseudoaleatorios criptográficamente seguro multiplataforma para Delphi
Quería un generador de números aleatorios multiplataforma fácil de usar que fuera más confiable que el Random integrado. Es modular por lo que puedes incluir sólo las piezas que quieras. Hace uso de la plataforma de proveedor aleatorio seguro para cada plataforma, con una interfaz de proveedor común. Solo lo probé en Win32, Win64, Android64 y Linux64.
Hay algunas pruebas básicas y una aplicación de muestra. Abierto a comentarios, informes de problemas y solicitudes de extracción. Especialmente si quieres probarlo en hardware de Apple.
Descargo de responsabilidad : asegúrese de comprender cualquier código antes de usarlo para cualquier cosa importante. El hecho de que llame a esto "criptográficamente seguro" no significa necesariamente que sea seguro o adecuado para la criptografía.
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 ;
La mayor parte de la funcionalidad proviene de la implementación básica, y la implementación específica de la plataforma proporciona la función GetBytes
.