Sample code for 30+ languages & platforms
DataFlex

Fortuna PRNG Generate Random Encoded

See more PRNG Examples

Demonstrates how to generate random bytes using the Fortuna PRNG. The random bytes are returned in an encoded string (using an encoding such as hex, base64, base58, etc.)

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoFortuna
    String sStrEntropy
    String sStrRandHex
    String sStrRandBase64
    String sStrRandBase58
    String sTemp1
    Boolean bTemp1

    Move False To iSuccess

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    Move False To iSuccess

    Get Create (RefClass(cComChilkatPrng)) To hoFortuna
    If (Not(IsComObjectCreated(hoFortuna))) Begin
        Send CreateComObject of hoFortuna
    End

    // Before beginning to generate random data, 
    // the PRNG (Pseudo Random Number Generator) should
    // be seeded with real random data (also known as "entropy").

    // Note: Accumulating real random data can be difficult
    // and time-consuming to collect.  It is for this reason
    // that pseudorandom data (i.e. a PRNG) is used.  The pseudorandom data generator
    // is seeded with entropy.  In addition, new entropy can (and should)
    // be periodically added as more pseudorandom data is generated.

    // Get 32 bytes of system entropy.  On Linux/Unix systems, this reads
    // from /dev/random.  On MS Windows systems, it uses the Crypto API's 
    // CryptGenRandom function.
    Get ComGetEntropy Of hoFortuna 32 "hex" To sStrEntropy
    Get ComLastMethodSuccess Of hoFortuna To bTemp1
    If (bTemp1 <> True) Begin
        Get ComLastErrorText Of hoFortuna To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Seed the PRNG with this entropy:
    Get ComAddEntropy Of hoFortuna sStrEntropy "hex" To iSuccess
    If (iSuccess <> True) Begin
        Get ComLastErrorText Of hoFortuna To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Generate some random data:
    Get ComGenRandom Of hoFortuna 16 "hex" To sStrRandHex
    Get ComGenRandom Of hoFortuna 22 "base64" To sStrRandBase64
    Get ComGenRandom Of hoFortuna 32 "base58" To sStrRandBase58

    Showln "hex random bytes: " sStrRandHex
    Showln "base64 random bytes: " sStrRandBase64
    Showln "base58 random bytes: " sStrRandBase58


End_Procedure