Current section

Files

Jump to
ex_kits lib crypto common.ex
Raw

lib/crypto/common.ex

defmodule ExKits.Crypto.Common do
@moduledoc false
@doc """
md5
"""
@spec md5(String.t()) :: binary()
def md5(plaintext), do: :crypto.hash(:md5, plaintext)
@doc """
sha1
"""
@spec sha(String.t()) :: binary()
def sha(plaintext), do: :crypto.hash(:sha, plaintext)
@doc """
sha256
"""
@spec sha256(String.t()) :: binary()
def sha256(plaintext), do: :crypto.hash(:sha256, plaintext)
@doc """
generate random string
## Example
iex(17)> Common.Crypto.random_string 16
"2jqDlUxDuOt-qyyZ"
"""
@spec random_string(integer()) :: String.t()
def random_string(length) do
length
|> :crypto.strong_rand_bytes()
|> Base.url_encode64()
|> binary_part(0, length)
end
@doc """
generate short random id
## Examples
iex> generate_id("H")
"H68203790HX446F"
"""
@spec generate_id(String.t()) :: String.t()
def generate_id(prefix) do
mid =
1..8
|> Enum.map(fn _ -> Enum.random(0..9) end)
|> Enum.join()
"#{prefix}#{mid}#{gen_reference()}"
end
defp gen_reference() do
min = String.to_integer("100000", 36)
max = String.to_integer("ZZZZZZ", 36)
max
|> Kernel.-(min)
|> :rand.uniform()
|> Kernel.+(min)
|> Integer.to_string(36)
end
end