{"id":17238848,"url":"https://github.com/sethblack/javascript-strong-password-generator","last_synced_at":"2025-04-14T02:45:11.860Z","repository":{"id":41826727,"uuid":"110261322","full_name":"sethblack/javascript-strong-password-generator","owner":"sethblack","description":"JavaScript Strong Password Generator: based on Jeff Atwood's Post \"Password Rules Are Bullshit\".","archived":false,"fork":false,"pushed_at":"2023-04-19T11:59:18.000Z","size":1420,"stargazers_count":21,"open_issues_count":6,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T06:41:30.209Z","etag":null,"topics":["javascript","javascript-library","nodejs","password","password-generator","random","random-number-generators"],"latest_commit_sha":null,"homepage":"https://www.sethserver.com/unicode-random-password-generator.html","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sethblack.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-10T15:20:25.000Z","updated_at":"2025-02-11T15:49:52.000Z","dependencies_parsed_at":"2024-10-31T05:31:41.303Z","dependency_job_id":"46a6b5fe-73cd-4cbd-ba88-a05a8368f582","html_url":"https://github.com/sethblack/javascript-strong-password-generator","commit_stats":{"total_commits":22,"total_committers":3,"mean_commits":7.333333333333333,"dds":0.4545454545454546,"last_synced_commit":"88f00b935fe1cab62fcc66bfe51050bccdd0f133"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethblack%2Fjavascript-strong-password-generator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethblack%2Fjavascript-strong-password-generator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethblack%2Fjavascript-strong-password-generator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sethblack%2Fjavascript-strong-password-generator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sethblack","download_url":"https://codeload.github.com/sethblack/javascript-strong-password-generator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248812855,"owners_count":21165494,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","javascript-library","nodejs","password","password-generator","random","random-number-generators"],"created_at":"2024-10-15T05:46:54.714Z","updated_at":"2025-04-14T02:45:11.831Z","avatar_url":"https://github.com/sethblack.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Javascript Strong Unicode Password Generator\n\n[![Abracadabra by taleas.com](https://www.taleas.com/static/images/comics/Abracadabra.png \"Abracadabra by taleas.com\")](https://www.taleas.com/comics/magician-wrong-password.html)\n\nThis tool is based on Jeff Atwood's Post [\"Password Rules Are Bullshit\"](https://blog.codinghorror.com/password-rules-are-bullshit/).\n\nYou can view a working demo at [https://www.sethserver.com/unicode-random-password-generator.html](https://www.sethserver.com/unicode-random-password-generator.html)\n\nIt currently uses six unicode blocks, but I don't see any reason why one can't use them all; this just makes the best looking passwords.\n\n## Installation\n\n`npm i javascript-strong-password-generator`\n\n## Basic Usage\n\nThis is a quick out-of-the-box usage example. This is not how you'd use it in production if you want it to be secure, but it will give you a decent random unicode password.\n\n```javascript\nconst jsspg = require('javascript-strong-password-generator');\n\njsspg.init();\nconst newPassword = jsspg.generate();\n\nconsole.log(newPassword);\n```\n\n## Command-line Usage\n\nJSSPG includes a simple command-line app that will generate a single random password seeded by your local environment.\n\n```shell\n$ js-spg\nƗÇŒk😪Ư2ëjOåęğ⚎Ŭ☦Ƙ🙅ēňxę😣☨😺Ú\n```\n\n## Advanced Usage\n\nTo reduce predictability add entropy from dynamic sytem state inforation such as CPU usage, number of active processes, availalbe ram and disk io.\n\n```javascript\nconst jsspg = require('javascript-strong-password-generator');\nconst si = require('systeminformation');\nconst sha512 = require('js-sha512');\n\nlet entropyval;\n\nfunction entropyAccumFunction() {\n  return new Promise(async (resolve) =\u003e {\n    const cpuSpeed = await si.cpu();\n    const processes = await si.processes();\n    const disksIO = await si.disksIO();\n    const memory = await si.mem();\n\n    entropyval = sha512(`${JSON.stringify(cpuSpeed)}:${JSON.stringify(processes)}:${JSON.stringify(disksIO)}:${JSON.stringify(memory)}`);\n\n    resolve();\n  });\n}\n\nfunction entropyFunction() {\n  return entropyval;\n}\n\nasync function run() {\n  await entropyAccumFunction();\n\n  jsspg.init({\n    timeBasedEntropy: false,\n    entropyFxn: entropyFunction,\n  });\n\n  process.stdout.write(`${jsspg.generate()}\\n`);\n}\n\nrun();\n```\n\n# Building for Browsers\n\nThis will generate a ./build/jsspg.min.js file for use in a web browser.\n\n```shell\n$ npm run webpack\n```\n\n## Basic Browser Usage\n\n```javascript\n\u003cscript src=\"js/jsspg.min.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n(function () {\n  jsspg.init();\n\n  var newPassword = jsspg.generate()\n  alert(newPassword);\n})();\n\u003c/script\u003e\n```\n\n# Core Concept\n\n[\"Password Rules Are Bullshit\"](https://blog.codinghorror.com/password-rules-are-bullshit/).\n\n## API\n\n### `jsspg.init(options)`\n\n#### Options [{ k: v }]\n\n- entropyFxn [function fxn()]: Custom entropy function. Must return an Array or string of length fortuna.entropySz (128 by default)\n- timeBasedEntropy [bool]: Detaches the reseeding of the algorithm from the call to random().\n- accumulateTimeout [int]: The amount of time in milliseconds between each timeBasedEntropy call. Requires timeBasedEntropy to be true.\n\n### `jsspg.generate(passwordLength)`\n\nGenerates a random Unicode password of length `passwordLength` (length is Unicode characters, not bytes).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsethblack%2Fjavascript-strong-password-generator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsethblack%2Fjavascript-strong-password-generator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsethblack%2Fjavascript-strong-password-generator/lists"}