Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Table Of Contents

Introduction

libgpw is java library to generate "pronounceable" passwords using trigram frequency analysis of English text. The code is taken from the java implementation mentioned in Random Password Generator page. The original source for the java applet is Gpw.java. The code is extracted from the source and created this maven project.

The original author of the code describes gpw in the comment at the top of Gpw.java as follows:

 /* GPW - Generate pronounceable passwords
This program uses statistics on the frequency of three-letter sequences
in English to generate passwords. The statistics are
generated from your dictionary by the program loadtris.
See www.multicians.org/thvv/gpw.html forhistory and info.
Tom Van Vleck
THVV 06/01/94 Coded
THVV 04/14/96 converted to Java
THVV 07/30/97 fixed for Netscape 4.0
*/

Changes

The following changes and additions are made to the original java code:

  • Converted to a maven project from java applet code
  • Created unit tests
  • Uses SecureRandom() instead of Random()
  • A CLI and a GUI using the library
  • The following APIs are added
APIDescription
generatePasswords(int numberOfPasswords, int passwordLength)Generates a list of random passwords. Takes the number of passwords to generate and the desired length of each password. Returns a list of pronounceable passwords that are easier to remember than completely random character strings.
generatePassphrases(int numberOfPassphrases, int numberOfWords, int wordLength)Generates a list of random passphrases. Takes the number of passphrases to generate, the number of words per passphrase, and the desired length of each word. Returns a list of multi-word passphrases that are more secure and memorable than single passwords.
modifyPassword(String password, boolean capitalize, boolean numerals, boolean symbols)Modifies an existing password by adding complexity. Takes a password string and boolean flags to optionally add capitalization, numerals (0-9), and/or symbols (special characters). Returns the modified password with the requested enhancements to increase strength and meet password policy requirements. This is a static utility method.

These APIs provide the core functionality for both the CLI tool and Swing GUI, allowing users to generate secure, pronounceable passwords and passphrases with customizable parameters.

How to build

Requires jdk 11+

 mvn clean install
mvn clean package
mvn test

The jar file libgpw-1.0.3.jar will be created in ./target directory

How to use

Maven projects

The library is available on Maven Central. Add the following dependency to your project's pom.xml:

<dependency>
<groupId>com.muquit.libgpw</groupId>
<artifactId>libgpw</artifactId>
<version>1.0.3</version>
</dependency>

Install locally (optional)

If you want to build from source and install to your local maven repository:

mvn install:install-file \
-Dfile=./target/libgpw-1.0.3.jar \
-DgroupId=com.muquit.libgpw \
-DartifactId=libgpw \
-Dversion=1.0.3 \
-Dpackaging=jar \
-DgeneratePom=true

This is useful if you want to modify the code and test it locally.

For non-maven projects, the libgpw-1.0.3.jar jar file and the jar file with tools are available from the Releases page.

Examples

Please look at TestGpw.java unit test file for complete examples.

importcom.muquit.gpw.Gpw;
importcom.muquit.gpw.GpwPasswordModifier;
Gpwgpw = newGpw();
intnpw = 4;
intpwlen = 8;
List<String> passwords = gpw.generatePasswords(npw, pwlen);
for (Stringpassword: passwords)
{
System.out.println(password);
Stringmodified = GpwPasswordModifier.modifyPassword(password, true, true, true);
System.out.println(" modified all: " + modified);
modified = GpwPasswordModifier.modifyPassword(password, true, false, false);
System.out.println(" modified caps: " + modified);
}

Add at least one upper case letter. The number depends on the length of the password.

finalStringoriginal = "password";
Stringmodified = GpwPasswordModifier.modifyPassword(original, true, false, false);
System.out.println("Original: " + original + " Modified caps: " + modified);

Similarly numbers, symbols can be added to the password.

Tools

The jar file can be used to run couple of tools. Note java 11+ is required. Example:

CLI

➤ java -jar libgpw-1.0.3.jar -h
Usage: gpw-cli [-cdhsVy] [-l=<passwordLength>] [-n=<numberOfPasswords>]
Generate pronounceable passwords
-c, --capitalize Add uppercase letters
-d, --digits Add numerals
-h, --help Show this help message and exit.
-l, --length=<passwordLength>
Password length (default: 8)
-n, --number=<numberOfPasswords>
Number of passwords to generate (default: 5)
-s, --spell Spell out password using NATO phonetic alphabet
-V, --version Print version information and exit.
-y, --symbols Add symbols
  • Generate 5 password with length 16, all lowercase
➤ java -jar libgpw-1.0.3.jar -n 5 -l 16
romanylindicaran
llimportfuserosh
pononverslosetch
ldepationferentr
ortivenavidenise
  • Spell out passwords using NATO phonetic alphabet
./gpw.bash -n 5 -s
termosti TangoEchoRomeoMikeOscarSierraTangoIndia
nesteedi NovemberEchoSierraTangoEchoEchoDeltaIndia
ableston AlphaBravoLimaEchoSierraTangoOscarNovember
ucruderp UniformCharlieRomeoUniformDeltaEchoRomeoPapa
osoleman OscarSierraOscarLimaEchoMikeAlphaNovember

There are 2 helper scripts gpw.bash and gpw.bat are supplied for convenience.

GUI

java -cp libgpw-1.0.3.jar gpwgui.GpwGui

Or use the helper scripts gpw-gui.bash and gpw-gui.bat

Some screenshots are shown below:

alt image1

alt image2

alt image3

alt image4

License

MIT License
Copyright (c) 2024-2026 https://muquit.com/
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

This project incorporates work covered by the following copyright and permission notice:

Random Password Generator by Tom Van Vleck

As requested by the original author:

  1. Users of this software are encouraged to share their source freely.
  2. Please inform the original author if you are using this software.
  3. Credit should be given to the original author and other pioneers for the data and algorithms used.

For full attribution and usage requirements, please see the NOTICE.txt file in this repository.


TOC is created by https://github.com/muquit/markdown-toc-go on Jun-02-2026

About

Pronounceable password generator - Java library with CLI and Swing GUI

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages