Кроссплатформенный криптографически безопасный генератор псевдослучайных чисел для Delphi
Мне нужен был простой в использовании кроссплатформенный генератор случайных чисел, который был бы более надежным, чем встроенный в Random. Он модульный, поэтому вы можете просто включить в него те детали, которые вам нужны. Использует безопасный случайный поставщик платформы для каждой платформы с общим интерфейсом поставщика. Я тестировал его только на Win32, Win64, Android64 и Linux64.
Есть несколько базовых тестов и пример приложения. Открыт для обратной связи, отчетов о проблемах и запросов на включение. Особенно, если вы хотите протестировать его на оборудовании Apple.
Отказ от ответственности : убедитесь, что вы понимаете любой код, прежде чем использовать его для чего-то важного. Тот факт, что я называю это «криптографически безопасным», не обязательно означает, что он безопасен или подходит для криптографии.
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 ;
Большая часть функциональности исходит из базовой реализации, а реализация для конкретной платформы предоставляет функцию GetBytes
.