{"id":17975086,"url":"https://github.com/initstring/mempg","last_synced_at":"2026-01-02T05:26:32.517Z","repository":{"id":39923166,"uuid":"494025716","full_name":"initstring/MemPG","owner":"initstring","description":"Memorable Passphrase Generator - create secure random passphrases that sound like sentences","archived":false,"fork":false,"pushed_at":"2022-05-21T06:41:35.000Z","size":269,"stargazers_count":4,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-12-17T02:09:57.387Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/initstring.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}},"created_at":"2022-05-19T10:33:01.000Z","updated_at":"2024-12-11T01:10:49.000Z","dependencies_parsed_at":"2022-08-25T08:00:10.409Z","dependency_job_id":null,"html_url":"https://github.com/initstring/MemPG","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initstring%2FMemPG","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initstring%2FMemPG/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initstring%2FMemPG/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/initstring%2FMemPG/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/initstring","download_url":"https://codeload.github.com/initstring/MemPG/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":237942469,"owners_count":19391430,"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":[],"created_at":"2024-10-29T17:18:10.574Z","updated_at":"2025-10-24T09:30:20.996Z","avatar_url":"https://github.com/initstring.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Memorable Passphrase Generator (MemPG)\n\n## Overview\n\nThis is a proof-of-concept to generate passphrases that are hard to guess but easy to remember. Other passphrase generators simply produce random words, with no thought to how they flow together.\n\nThe idea here is to define some structures that resemble sentences, and then to leverage large word-lists specific to parts-of-speech (adjectives, nouns, verbs, etc) to fill them in randomly.\n\nThis is done by defining a passphrase format for various lengths. For example:\n\n`\"adjective noun verb-present adverb\"`\n\nThen, we randomly select the correct word type from word-lists organized by parts of speech. We end up with a phrase that can hopefully evoke a mini-story in our heads, without choosing something guessable like a song lyric or a movie quote.\n\nHere are some real examples generated with this tool:\n\n````\n# 28 bits of entropy:\nstormbound jitters\n\n# 40 bits of entropy:\nneglectfully unpasteurized indoctrination\n\n# 52 bits of entropy:\nuncensored patriarch shops grotesquely\n\n# 61 bits of entropy:\ntricycle trawls covertly outside saipan\n\n# 87 bits of entropy:\npowered monarchist digitizes permissibly beneath revalueing offer\n\n(... more to come, still a work in progress)\n````\n\n## Usage\n\nWhen running the tool from the cloned source, leverage the helper script in the root directory. Example:\n\n```\nmempg.sh -l4 -p 10\n```\n\nThe tool accepts three optional parameters:\n\n```\n  -l LENGTH, --length LENGTH    Length of passphrase to generate. Default: 4\n  -n, --numbers                 Add random digits to end of phrase Default: False\n  -p PHRASES, --phrases PHRASES How many phrases to generate. Default: 1\n```\n\nEach run will generate a simple entropy calculation, based on the length of the input wordlists for each word selected.\n\n## Contributing\n\nPlease open an issue to start a discussion on any major contributions. For any small fixes, just submit a PR. Thank you!\n\nRight now, I am particularly interested in help with making the phrases sound more natural. This might include improving/curating some of the wordlists, as well as modifying or adding additional phrase formats as defined in `fmt_options` inside `generators.py`.\n\n## Sources\n\nI've sourced the word-lists from the following locations:\n\n- [WordNet](https://wordnet.princeton.edu/) from Princeton University:\n    - nouns\n    - adverbs\n    - adjectives\n    - verbs\n- Wikipedia:\n    - [prepositions](https://en.wikipedia.org/wiki/List_of_English_prepositions) (prototypical, conjunctive)\n\n## Warnings\n\nPlease don't bet your life or your money on my crappy Python script without fully understanding what it is doing. I'm just some guy on the Internet, hobbling code together and crossing my fingers.\n\nHuman memory isn't the best device to manage lots of passwords. However, we do need to remember SOME passwords - like the one to unlock your password manager, for instance. Understand what you are protecting and what type of password attack you are defending against (online, offline, etc) fully before using a tool like this.\n\nThere are surely flaws with this approach. Please open issues to tell me what a fool I am for doing this or that, so I can hopefully improve it. Thanks!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finitstring%2Fmempg","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finitstring%2Fmempg","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finitstring%2Fmempg/lists"}