npm install random-hash
Generating hashes - optional configuration in function argument
import generateHash from 'random-hash';
generateHash(); // '0yyv6Z'
generateHash({ length: 4 }); // 'KLgF'
generateHash({
charset: ['๐', '๐', '๐', '๐', '๐ค', '๐ค', '๐ด', '๐']
}); // '๐๐ค๐๐๐๐ค'
generateHash({
rng: randomBytes => new Array(randomBytes).fill(0)
}); // 'aaaaaa'
Creating a stateful function object that stores its configuration and can be manipulated from the outside
import { RandomHash } from 'random-hash';
import { randomBytes } from 'crypto';
// With options (default values)
const generateHash = new RandomHash({
length: 6,
charset: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_',
rng: randomBytes
});
// Without options
const generateHash = new RandomHash;
generateHash(); // 'VE5xn-'
generateHash({ length: 4 }); // 'E2s4'
generateHash(); // 'O1oJkK'
// Permanently setting hash length
generateHash.length = 4;
generateHash(); // 'AyHK'
// Permanently setting charset
generateHash.charset = ['๐', '๐', '๐', '๐', '๐ค', '๐ค', '๐ด'];
generateHash(); // '๐ด๐๐๐'
generateHash.rng = randomBytes => new Array(randomBytes).fill(0);
generateHash(); // '๐๐๐๐'
|----------- a1 ----------| ... |------------------------- a(n) ------------------------|
| b1 b2 b3 b4 b5 b6 b7 b8 | ... | b(n-7) b(n-6) b(n-5) b(n-4) b(n-3) b(n-2) b(n-1) b(n) |
|--- c1 ---| ... |-- c(n) --|
a(n): binary with 8 digits
b(n): binary from RNG
c(n): binary with log2(charset.length) digits
a1 ... a(ceil(hashLength * log2(charset.length) / 8))
b1 ... b(ceil(hashLength * log2(charset.length) / 8) * 8)
c1 ... c(hashLength)
charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_'
length = 4
|------- a1 ------|------- b2 ------|------- c3 ------|
| 0 1 1 0 0 0 1 1 | 0 1 0 1 0 1 0 0 | 0 0 0 0 0 0 0 1 | random bytes
|---- c1 ----|----- c2 ----|----- c3 ----|---- c4 ----|
|----- y ----|----- 1 -----|----- q -----|----- b ----| = 'y1qb'
Example
charset = ['๐', '๐', '๐', '๐', '๐ค', '๐ค', '๐ด', '๐', '๐ค', '๐ค', '๐ญ', '๐', '๐ป', '๐ฝ', '๐ค', '๐ฉ', '๐
', '๐ช', '๐', '๐', '๐', '๐', 'โ', 'โ', '๐', '๐', '๐', '๐', '๐', '๐', '๐ฃ', '๐']
length = 3
|------- a1 ------|------- b2 ------|
| 0 0 0 1 1 0 1 1 | 0 0 1 0 1 1 1 0 | random bytes
|--- c1 ---|---- c2 ---|--- c3 --|
|--- ๐ ---|---- ๐ป ----|--- โ ---| = '๐๐ปโ'