Um gerador de números pseudo-aleatórios criptograficamente seguro e multiplataforma para Delphi
Eu queria um gerador de números aleatórios multiplataforma fácil de usar que fosse mais confiável do que o Random integrado. É modular para que você possa incluir apenas as peças que deseja. Faz uso da plataforma de provedor aleatório seguro para cada plataforma, com uma interface de provedor comum. Eu testei apenas em Win32, Win64, Android64 e Linux64.
Existem alguns testes básicos e um aplicativo de exemplo. Aberto a feedback, relatórios de problemas e solicitações pull. Especialmente se você quiser testá-lo em hardware Apple.
Isenção de responsabilidade : certifique-se de compreender qualquer código antes de usá-lo para qualquer coisa importante. Só porque estou chamando isso de "criptograficamente seguro" não significa necessariamente que seja seguro ou adequado para criptografia.
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 ;
A maior parte da funcionalidade vem da implementação básica, com a implementação específica da plataforma fornecendo a função GetBytes
.