2025-12-15 16:40:17 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-04 01:04:43 +01:00
2025-12-03 23:39:22 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-04 00:58:40 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-15 16:35:35 +01:00
2025-12-04 00:58:40 +01:00
2025-12-15 16:35:35 +01:00
2025-12-05 23:40:05 +01:00

Hasher 🔐

A modern, high-performance hash search and generation tool powered by Redis and Next.js. Search for hash values to find their plaintext origins or generate hashes from any text input.

Hasher Banner Redis TypeScript

Features

  • 🔍 Hash Lookup: Search for MD5, SHA1, SHA256, and SHA512 hashes
  • 🔑 Hash Generation: Generate multiple hash types from plaintext
  • 💾 Auto-Indexing: Automatically stores searched plaintext and hashes
  • 📊 Redis Backend: Ultra-fast in-memory storage with persistence
  • 🚀 Bulk Indexing: Import wordlists via command-line script with resume capability
  • 🎨 Modern UI: Beautiful, responsive interface with real-time feedback
  • 📋 Copy to Clipboard: One-click copying of any hash value
  • High Performance: Lightning-fast searches with Redis indexing

🏗️ Architecture

┌─────────────┐
│   Next.js   │ ← Modern React UI
│   Frontend  │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│   API       │ ← REST endpoints
│   Routes    │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│    Redis    │ ← In-memory storage
│  (Key-Value │   (localhost:6379)
│   + Hashes) │
└─────────────┘

🚀 Quick Start

Prerequisites

  • Node.js 18.x or higher
  • Redis 6.x or higher running on localhost:6379
  • npm or yarn

Installation

  1. Clone the repository

    git clone <repository-url>
    cd hasher
    
  2. Install dependencies

    npm install
    
  3. Start Redis (if not already running)

    # Using Docker
    docker run -d --name redis -p 6379:6379 redis:latest
    
    # Or using system package manager
    sudo systemctl start redis
    
  4. Configure Redis (optional)

    By default, the app connects to localhost:6379. To change this:

    export REDIS_HOST=your-redis-host
    export REDIS_PORT=6379
    export REDIS_PASSWORD=your-password  # if authentication is enabled
    export REDIS_DB=0                    # database number
    
  5. Run the development server

    npm run dev
    
  6. Open your browser

    Navigate to http://localhost:3000

📖 Usage

Web Interface

  1. Search for a Hash

    • Enter any MD5, SHA1, SHA256, or SHA512 hash
    • Click search or press Enter
    • View the plaintext result if found in the database
  2. Generate Hashes

    • Enter any plaintext string
    • Get instant hash values for all supported algorithms
    • Hashes are automatically saved for future lookups

Bulk Indexing Script

Index large wordlists or dictionaries:

# Basic usage
npm run index-file wordlist.txt

# With custom batch size
npm run index-file wordlist.txt -- --batch-size 500

# Skip duplicate checking (faster)
npm run index-file wordlist.txt -- --no-check

# Resume interrupted indexing
npm run index-file wordlist.txt -- --resume

# Show help
npm run index-file -- --help

Input file format: One word/phrase per line

password
admin
123456
qwerty

Script features:

  • Bulk indexing with configurable batch size
  • Progress indicator and real-time stats
  • State persistence with resume capability
  • Optional duplicate checking
  • Error handling and reporting
  • Performance metrics (docs/sec)

🔌 API Reference

Search Endpoint

POST /api/search

Search for a hash or generate hashes from plaintext.

Request Body:

{
  "query": "5f4dcc3b5aa765d61d8327deb882cf99"
}

Response (Hash Found):

{
  "found": true,
  "hashType": "md5",
  "hash": "5f4dcc3b5aa765d61d8327deb882cf99",
  "results": [{
    "plaintext": "password",
    "hashes": {
      "md5": "5f4dcc3b5aa765d61d8327deb882cf99",
      "sha1": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8",
      "sha256": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8",
      "sha512": "b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86"
    }
  }]
}

Response (Plaintext Input):

{
  "found": true,
  "isPlaintext": true,
  "plaintext": "password",
  "hashes": {
    "md5": "5f4dcc3b5aa765d61d8327deb882cf99",
    "sha1": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8",
    "sha256": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8",
    "sha512": "b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86"
  }
}

Health Check Endpoint

GET /api/health

Check Redis connection and index status.

Response:

{
  "status": "ok",
  "redis": {
    "connected": true,
    "version": "7.0.15",
    "usedMemory": 2097152,
    "dbSize": 1542
  },
  "index": {
    "exists": true,
    "name": "hasher",
    "stats": {
      "documentCount": 1542,
      "indexSize": 524288
    }
  }
}

🗄️ Redis Data Structure

Key Structure

Main Documents: hash:plaintext:{plaintext}

  • Stores complete hash document as JSON string
  • Contains all hash algorithms and metadata

Hash Indexes: hash:index:{algorithm}:{hash}

  • Reverse lookup from hash to plaintext
  • One key per algorithm (md5, sha1, sha256, sha512)
  • Value is the plaintext string

Statistics: hash:stats (Redis Hash)

  • count: Total number of unique plaintexts
  • size: Approximate total size in bytes

Document Schema

{
  "plaintext": string,
  "md5": string,
  "sha1": string,
  "sha256": string,
  "sha512": string,
  "created_at": string (ISO 8601)
}

📁 Project Structure

hasher/
├── app/
│   ├── api/
│   │   ├── search/
│   │   │   └── route.ts        # Search endpoint
│   │   └── health/
│   │       └── route.ts        # Health check endpoint
│   ├── layout.tsx              # Root layout
│   ├── page.tsx                # Main UI component
│   └── globals.css             # Global styles
├── lib/
│   ├── redis.ts                # Redis client & data layer
│   └── hash.ts                 # Hash utilities
├── scripts/
│   ├── index-file.ts           # Bulk indexing script
│   └── remove-duplicates.ts    # Duplicate removal utility
├── package.json
├── tsconfig.json
├── next.config.ts
└── README.md

🛠️ Development

Build for Production

npm run build
npm run start

Environment Variables

Create a .env.local file:

REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=your-password
REDIS_DB=0

Linting

npm run lint

🔒 Supported Hash Algorithms

Algorithm Length (hex) Detection Pattern
MD5 32 ^[a-f0-9]{32}$
SHA1 40 ^[a-f0-9]{40}$
SHA256 64 ^[a-f0-9]{64}$
SHA512 128 ^[a-f0-9]{128}$

🚀 Performance

  • Bulk Indexing: ~1000-5000 docs/sec (depending on hardware)
  • Search Latency: <50ms (typical)
  • Horizontal Scaling: 10 shards for parallel processing
  • Auto-refresh: Instant search availability for new documents

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingFeature)
  3. Commit your changes (git commit -m 'Add some AmazingFeature')
  4. Push to the branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

📝 License

This project is open source and available under the MIT License.

🙏 Acknowledgments

📧 Support

For issues, questions, or contributions, please open an issue on GitHub.


Made with ❤️ for the security and development community

Descripción
A modern, high-performance hash search and generation tool powered by Elasticsearch and Next.js. Search for hash values to find their plaintext origins or generate hashes from any text input.
https://hasher.manalejandro.com
Readme MIT 190 KiB
Languages
TypeScript 50.9%
JavaScript 48.2%
CSS 0.9%