Skip to content

๐Ÿ” A secure command-line password generator with QR code generation and clipboard integration, powered by /dev/urandom

License

Notifications You must be signed in to change notification settings

0xEtherPunk/passGen

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

11 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ” PassGen

Secure Password Generator & Encryption Tool

Go Version License

Demo

๐Ÿš€ Features

  • ๐ŸŽฒ Cryptographically secure password generation
  • ๐Ÿ”’ XChaCha20-Poly1305 encryption
  • ๐ŸŒ Multi-language BIP39 mnemonic support
  • ๐Ÿ“ฑ QR code generation and reading
  • ๐Ÿ“‹ Automatic clipboard integration
  • ๐Ÿ“ค Pipe support for text input/output

๐Ÿ“ฆ Installation

go install github.com/0xEtherPunk/passgen@latest

# Optional: Create alias
echo 'alias pg="passgen"' >> ~/.bashrc # or zsh

๐ŸŽฏ Command Flags

Basic Flags

  • -l <number> - Set password length (default: random 24-28)
  • -o <file> - Save output to PNG file
  • -s <size> - Set QR code size in pixels (default: 256)

Encryption Flags

  • -e <text> - Encrypt text (requires -p)
  • -p <password> - Password for encryption/decryption
  • -d <file/text> - Decrypt from file or text

BIP39 Flags

  • -b - Generate BIP39 mnemonic (24 words by default)
  • -12 - Generate 12-word mnemonic (use with -b)

Language Flags (for BIP39)

  • -en - English wordlist (default)
  • -ru - Russian wordlist ๐Ÿ‡ท๐Ÿ‡บ
  • -jp - Japanese wordlist ๐Ÿ‡ฏ๐Ÿ‡ต
  • -cn - Chinese wordlist ๐Ÿ‡จ๐Ÿ‡ณ
  • -fr - French wordlist ๐Ÿ‡ซ๐Ÿ‡ท
  • -it - Italian wordlist ๐Ÿ‡ฎ๐Ÿ‡น
  • -ko - Korean wordlist ๐Ÿ‡ฐ๐Ÿ‡ท
  • -es - Spanish wordlist ๐Ÿ‡ช๐Ÿ‡ธ

Custom Flag

  • -c <text> - Create QR code from custom text

Examples

# Password generation
pg -l 32                    # 32-char password
pg -l 16 -o pass.png       # 16-char password with QR

# Encryption
pg -e secret -p pass   # Encrypt text
pg -d file.png -p pass   # Decrypt from file

# BIP39
pg -b                      # 24 words in English
pg -b -12 -ru             # 12 words in Russian
pg -b -jp -o seed.png     # Japanese with QR

๐Ÿ› ๏ธ Usage Examples

๐ŸŽฒ Password Generation

# Basic password (24-28 chars)
pg
pg -o pass.png           # Save as QR
pg -s 512 -o pass.png   # Custom QR size

# Custom length
pg -l 32
pg -l 16 -o pass.png

๐Ÿ” Encryption

Encryption

# Basic encryption
pg -e secret text -p password123
pg -e secret text -p password123 -o secret.png

# Multi-word text
pg -e this is my secret text -p pass123 -o secret.png

# Using generated password from clipboard
pg -o pass.png                   # Generate and save password
pg -e secret text -p "$(xclip)" -o secret.png

# Pipe input
echo "secret text" | pg -e -p "pass123"
cat file.txt | pg -e -p "pass123" -o encrypted.png

# Custom QR sizes
pg -e "secret" -p "pass" -o large.png -s 512
pg -e "secret" -p "pass" -o huge.png -s 1024

๐Ÿ”“ Decryption

# From QR file
pg -d secret.png -p "pass123"

# From encrypted text
pg -d "encrypted_base64_text" -p "pass123"

# Save decrypted to file
pg -d secret.png -p "pass123" > decrypted.txt

๐ŸŒ BIP39 Mnemonic Generation

# English (default)
pg -b            # 24 words
pg -b -12        # 12 words
pg -b -o mnemonic.png

# Other languages
pg -b -ru        # ๐Ÿ‡ท๐Ÿ‡บ Russian
pg -b -jp        # ๐Ÿ‡ฏ๐Ÿ‡ต Japanese
pg -b -cn        # ๐Ÿ‡จ๐Ÿ‡ณ Chinese
pg -b -fr        # ๐Ÿ‡ซ๐Ÿ‡ท French
pg -b -it        # ๐Ÿ‡ฎ๐Ÿ‡น Italian
pg -b -ko        # ๐Ÿ‡ฐ๐Ÿ‡ท Korean
pg -b -es        # ๐Ÿ‡ช๐Ÿ‡ธ Spanish

# Combined flags
pg -b -12 -ru -o mnemonic.png    # 12 Russian words with QR
pg -b -jp -s 512 -o phrase.png   # Japanese with large QR

๐Ÿ“ฑ QR Code Operations

# Custom text to QR
pg -c "any text" -o qr.png
pg -c "large text" -s 512 -o qr.png

# Read from QR
pg -d qr.png

๐Ÿ”„ Pipeline Examples

# Generate BIP39 and encrypt with clipboard password
pg -l 32                    # Generate and copy password
pg -b -12 -o seed.png | pg -e -p "$(xclip -o)" -o backup.png

# Or using xsel
pg -b -12 -o seed.png | pg -e -p "$(xsel -b)" -o backup.png

# For macOS:
pg -b -12 -o seed.png | pg -e -p "$(pbpaste)" -o backup.png

### ๐Ÿ”„ Advanced Usage
```bash
# Encrypt BIP39 phrase
pg -b -12 -o seed.png | pg -e -p "pass123" -o backup.png

# Create encrypted backup
tar czf - documents/ | \
  pg -e -p "pass123" -o backup.png -s 1024

๐ŸŽจ Creative Use Cases

# Secure BIP39 backup with encryption
pg -b -12 -o seed.png | pg -e -p "secret123" -o encrypted_seed.png -s 1000

# Multi-language secure backup
pg -b -12 -ru -o seed_ru.png | pg -e -p "ะฟะฐั€ะพะปัŒ123" -o backup_ru.png
pg -b -12 -jp -o seed_jp.png | pg -e -p "ใƒ‘ใ‚นใƒฏใƒผใƒ‰" -o backup_jp.png

# Create encrypted archive with seeds
mkdir seeds/
pg -b -12 -o seeds/en.png
pg -b -12 -ru -o seeds/ru.png
pg -b -12 -jp -o seeds/jp.png
tar czf - seeds/ | pg -e -p "archive123" -o seeds_backup.png -s 2000

# Secure password sharing
pg -l 32 -o pass.png | pg -e -p "share123" -o shared_pass.png
# Recipient can decrypt with: pg -d shared_pass.png -p "share123"

๐Ÿ” Tips & Tricks

  • ๐ŸŽฏ Generated passwords are automatically copied to clipboard
  • ๐Ÿ–ผ๏ธ QR codes are shown in terminal if no output file specified
  • ๐Ÿ“‹ Encrypted text is copied to clipboard for easy sharing
  • ๐Ÿ”„ Pipe support works with any text-producing command
  • ๐ŸŽจ Custom QR sizes help with scanning distance/resolution

๐Ÿ’ก Tips & Tricks

  • Generate and encrypt in one command using pipes
  • Use different QR sizes for different data lengths
  • Combine BIP39 languages for extra entropy
  • Store encryption keys as separate QR codes
  • Use generated passwords for encryption
  • Create multi-part backups for extra security

๐Ÿ—๏ธ Project Structure

passGen/
โ”œโ”€โ”€ cmd/
โ”‚   โ””โ”€โ”€ passgen/
โ”‚       โ””โ”€โ”€ main.go           # ๐ŸŽฏ Entry point
โ”œโ”€โ”€ internal/
โ”‚   โ”œโ”€โ”€ bip39/               # ๐ŸŽฒ BIP39 implementation
โ”‚   โ”‚   โ”œโ”€โ”€ wordlist/        # ๐ŸŒ Language wordlists
โ”‚   โ”‚   โ”œโ”€โ”€ bip39.go        
โ”‚   โ”‚   โ””โ”€โ”€ wordlist.go     
โ”‚   โ”œโ”€โ”€ crypto/              # ๐Ÿ”’ Encryption
โ”‚   โ”‚   โ””โ”€โ”€ xchacha.go       # XChaCha20-Poly1305
โ”‚   โ”œโ”€โ”€ clipboard/           # ๐Ÿ“‹ Clipboard operations
โ”‚   โ”œโ”€โ”€ generator/           # ๐ŸŽฏ Password generation
โ”‚   โ””โ”€โ”€ qr/                  # ๐Ÿ“ฑ QR code operations
โ””โ”€โ”€ README.md

โš™๏ธ Requirements

  • ๐Ÿ”ง Go 1.23.2 or higher
  • ๐Ÿง Unix-like system (for /dev/urandom)
  • ๐Ÿ“‹ xclip/xsel for Linux clipboard support
  • ๐Ÿ“‹ pbcopy/pbpaste for macOS clipboard support

๐Ÿ”’ Technical Details

Password Generation

  • Uses /dev/urandom for cryptographic randomness
  • Default length: 24-28 characters
  • Character set includes:
    • Lowercase letters (a-z)
    • Uppercase letters (A-Z)
    • Numbers (0-9)
    • Special characters (!@#$%^&*()_+-=[]{}|;:,.<>?)

BIP39 Implementation

  • Supports 8 languages: ๐Ÿ‡บ๐Ÿ‡ธ EN, ๐Ÿ‡ท๐Ÿ‡บ RU, ๐Ÿ‡ฏ๐Ÿ‡ต JP, ๐Ÿ‡จ๐Ÿ‡ณ CN, ๐Ÿ‡ซ๐Ÿ‡ท FR, ๐Ÿ‡ฎ๐Ÿ‡น IT, ๐Ÿ‡ฐ๐Ÿ‡ท KO, ๐Ÿ‡ช๐Ÿ‡ธ ES
  • 12 or 24 word phrases
  • Follows official BIP39 specification
  • Entropy: 128 bits (12 words) or 256 bits (24 words)

Encryption Details

  • Algorithm: XChaCha20-Poly1305
  • Unique salt for each encryption

QR Code Features

  • Default size: 256x256 pixels
  • Custom sizes supported
  • Supports both generation and reading
  • ASCII art display in terminal

๐ŸŒŸ If you find PassGen useful, please star it on GitHub!