# Pseudo-Random Number Generators

## Logistic map

ChaoticEncryption.logistic_keyMethod
logistic_key(x_init, r, num_keys; scaling_factor=10.0^16, upper_bound=256.0)

Generates a vector of pseudo-random keys using the Logistic Map.

The equation -

$$$x_{n+1} = r * x_{n} * (1 - x_{n})$$$

Arguments

• x_init::Float64: Initial value of x. x ϵ (0, 1).
• r::Float64: A constant value. Values > 4 usually results in pseudo-random numbers.
• num_keys::Int64: Number of keys to be generated.
• scaling_factor::Float64=10.0^16: Factor to be multiplied to the generated value of pseudo-random number. Ideally, the factor should be > upper_bound.
• upper_bound::Float64=256.0: Upper bound of keys (not included). Use 256 for encrypting images as the RGB values of a pixel varies from 0 to 255.

Returns

• keys::Vector{Int64}:: Generated pseudo-random keys.

Example

julia> logistic_key(0.01, 3.97, 20)
20-element Vector{Int64}:
0
44
7
26
14
224
16
250
162
211
200
217
97
132
134
100
135
232
122
102

## Lorenz system of differential equations

ChaoticEncryption.lorenz_keyMethod
lorenz_key(x_init, y_init, z_init, num_keys; α=10.0, ρ=28.0, β=2.667, dt=0.01, scaling_factor=10.0^16, upper_bound=256.0)

Generates 3 vectors of pseudo-random numbers using Lorenz system of differential equations.

The equations -

$$$\frac{dx}{dt} = α * (y - x)$$$$$$\frac{dy}{dt} = x * (ρ - z) - y$$$$$$\frac{dz}{dt} = x * y - β * z$$$

Arguments

• x_init::Float64: Initial value of x.
• y_init::Float64: Initial value of y.
• z_init::Float64: Initial value of z.
• num_keys::Int64: Number of keys (in a single list) to be generated.
• α::Float64: Constant associated with Lorenz system of differential equations.
• ρ::Float64: Constant associated with Lorenz system of differential equations.
• β::Float64: Constant associated with Lorenz system of differential equations.
• scaling_factor::Float64=10.0^16: Factor to be multiplied to the generated value of pseudo-random number. Ideally, the factor should be > upper_bound.
• upper_bound::Float64=256.0: Upper bound of keys (not included). Use 256 for encrypting images as the RGB values of a pixel varies from 0 to 255.

Returns

• x::Vector{Int64}: Generated pseudo-random keys corresponding to x values.
• y::Vector{Int64}: Generated pseudo-random keys corresponding to y values.
• z::Vector{Int64}: Generated pseudo-random keys corresponding to z values.

Example

julia> lorenz_key(0.01, 0.02, 0.03, 20)
([0, 0, 256, 24, 129, 42, 54, 134, 43, 179, 85, 19, 24, 44, 71, 210, 238, 152, 22, 27], [0, 0, 240, 55, 25, 163, 89, 243, 123, 5, 197, 64, 227, 54, 188, 226, 154, 134, 64, 69], [0, 0, 80, 227, 178, 204, 89, 33, 144, 139, 105, 208, 108, 155, 61, 254, 57, 102, 149, 47])