Last active
February 8, 2021 23:30
-
-
Save krmgns/712ae3610de59cdd9fb1bd46196419f3 to your computer and use it in GitHub Desktop.
Generate randomized Salts & GUIDs.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const crypto = require('crypto'); | |
| const util = require('util'); | |
| const Salt = { | |
| /** | |
| * Length. | |
| * @const int | |
| */ | |
| LENGTH: 128, | |
| /** | |
| * Characters. | |
| * @const string | |
| */ | |
| CHARACTERS: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/', | |
| /** | |
| * Generate. | |
| * @param {Int} length? | |
| * @param {Int} bitsPerChar? | |
| * @return {String} | |
| * @see https://github.com/php/php-src/blob/master/ext/session/session.c#L267,#L326 | |
| */ | |
| generate: function(length, bitsPerChar) | |
| { | |
| let len = length || this.LENGTH; // output length | |
| let bpc = bitsPerChar || 6; // 4=hex chars, 5=base36 chars, 6=base64 chars | |
| let bytes = crypto.randomBytes(parseInt(Math.ceil(len * bpc / 8))); | |
| let p = 0, q = bytes.length; | |
| let w = 0, have = 0, mask = (1 << bpc) - 1, byte; | |
| let out = ''; | |
| while (len--) { | |
| if (have < bpc) { | |
| if (p < q) { | |
| byte = bytes[p++]; | |
| w |= (byte << have); | |
| have += 8; | |
| } else { | |
| break; | |
| } | |
| } | |
| // consume bpc bits | |
| out += this.CHARACTERS[w & mask]; | |
| w >>= bpc; | |
| have -= bpc; | |
| } | |
| return out; | |
| } | |
| }; | |
| const Guid = { | |
| /** | |
| * Generate. | |
| * @return {String} | |
| */ | |
| generate: function () | |
| { | |
| let list = new Array(8).fill().map(() => this.random()); | |
| return util.format('%s%s-%s-%s-%s-%s%s%s', ...list); | |
| }, | |
| /** | |
| * Generate (in old way). | |
| * @return {String} | |
| */ | |
| generateOld: function () | |
| { | |
| let size = 8; | |
| let list = new Array(size); | |
| while (size) list[--size] = this.random(); | |
| return list[0] + list[1] | |
| + '-' + list[2] + '-' + list[3] + '-' + list[4] | |
| + '-' + list[5] + list[6] + list[7]; | |
| }, | |
| /** | |
| * Make 4-length xdigits randomly. | |
| * @return {String} | |
| * @internal | |
| */ | |
| random: function () | |
| { | |
| return Math.random().toString(16).slice(-4); | |
| } | |
| }; | |
| module.exports = Salt; | |
| module.exports = Guid; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment