2025-12-07 01:28:37 +01:00
2025-12-05 23:40:05 +01:00
2025-12-05 23:40:05 +01:00
2025-12-04 01:44:37 +01:00
2025-12-07 01:28:37 +01:00
2025-12-04 01:04:43 +01:00
2025-12-03 23:39:22 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-05 23:40:05 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-04 00:58:40 +01:00
2025-12-05 23:40:05 +01:00

Hasher 🔐

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.

Hasher Banner Elasticsearch TypeScript

Features

  • 🔍 Hash Lookup: Search for MD5, SHA1, SHA256, SHA512, and Bcrypt hashes
  • 🔑 Hash Generation: Generate multiple hash types from plaintext
  • 💾 Auto-Indexing: Automatically stores searched plaintext and hashes
  • 📊 Elasticsearch Backend: Scalable storage with 10 shards for performance
  • 🚀 Bulk Indexing: Import wordlists via command-line script
  • 🎨 Modern UI: Beautiful, responsive interface with real-time feedback
  • 📋 Copy to Clipboard: One-click copying of any hash value

🏗️ Architecture

┌─────────────┐
│   Next.js   │ ← Modern React UI
│   Frontend  │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│   API       │ ← REST endpoints
│   Routes    │
└──────┬──────┘
       │
       ↓
┌─────────────┐
│Elasticsearch│ ← Distributed storage
│ 10 Shards   │   (localhost:9200)
└─────────────┘

🚀 Quick Start

Prerequisites

  • Node.js 18.x or higher
  • Elasticsearch 8.x running on localhost:9200
  • npm or yarn

Installation

  1. Clone the repository

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

    npm install
    
  3. Configure Elasticsearch (optional)

    By default, the app connects to http://localhost:9200. To change this:

    export ELASTICSEARCH_NODE=http://your-elasticsearch-host:9200
    
  4. Run the development server

    npm run dev
    
  5. 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

# 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 with percentage
  • Error handling and reporting
  • Performance metrics (docs/sec)
  • Automatic index refresh

🔌 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 Elasticsearch connection and index status.

Response:

{
  "status": "ok",
  "elasticsearch": {
    "cluster": "elasticsearch",
    "status": "green"
  },
  "index": {
    "exists": true,
    "name": "hasher",
    "stats": {
      "documentCount": 1542,
      "indexSize": 524288
    }
  }
}

🗄️ Elasticsearch Index

Index Configuration

  • Name: hasher
  • Shards: 10 (for horizontal scaling)
  • Replicas: 1 (for redundancy)

Mapping Schema

{
  "plaintext": {
    "type": "text",
    "analyzer": "lowercase_analyzer",
    "fields": {
      "keyword": { "type": "keyword" }
    }
  },
  "md5": { "type": "keyword" },
  "sha1": { "type": "keyword" },
  "sha256": { "type": "keyword" },
  "sha512": { "type": "keyword" },
  "created_at": { "type": "date" }
}

📁 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/
│   ├── elasticsearch.ts        # ES client & index config
│   └── hash.ts                 # Hash utilities
├── scripts/
│   └── index-file.ts           # Bulk indexing script
├── 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:

ELASTICSEARCH_NODE=http://localhost:9200

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}$
Bcrypt 60 ^\$2[abxy]\$

🚀 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 170 KiB
Languages
TypeScript 56.3%
JavaScript 42.6%
CSS 1.1%