{"id":36970536,"url":"https://github.com/oritwoen/shaha","last_synced_at":"2026-01-13T21:48:54.815Z","repository":{"id":331106191,"uuid":"1124353394","full_name":"oritwoen/shaha","owner":"oritwoen","description":"Hash database builder and reverse lookup tool. SHA + aha!","archived":false,"fork":false,"pushed_at":"2026-01-01T19:48:48.000Z","size":79,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-03T06:19:53.394Z","etag":null,"topics":["cli","crypto","hash","parquet","reverse-lookup","rust","security"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oritwoen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-12-28T21:40:06.000Z","updated_at":"2026-01-01T19:48:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oritwoen/shaha","commit_stats":null,"previous_names":["oritwoen/shaha"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/oritwoen/shaha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oritwoen%2Fshaha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oritwoen%2Fshaha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oritwoen%2Fshaha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oritwoen%2Fshaha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oritwoen","download_url":"https://codeload.github.com/oritwoen/shaha/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oritwoen%2Fshaha/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28401098,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","crypto","hash","parquet","reverse-lookup","rust","security"],"created_at":"2026-01-13T21:48:54.221Z","updated_at":"2026-01-13T21:48:54.808Z","avatar_url":"https://github.com/oritwoen.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# shaha\n\n[![Crates.io](https://img.shields.io/crates/v/shaha?style=flat\u0026colorA=130f40\u0026colorB=474787)](https://crates.io/crates/shaha)\n[![Downloads](https://img.shields.io/crates/d/shaha?style=flat\u0026colorA=130f40\u0026colorB=474787)](https://crates.io/crates/shaha)\n[![License](https://img.shields.io/crates/l/shaha?style=flat\u0026colorA=130f40\u0026colorB=474787)](LICENSE)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/oritwoen/shaha)\n\nHash database builder and reverse lookup tool. *SHA + aha!*\n\nBuild precomputed hash databases from wordlists, then query them to find preimages.\n\n## Installation\n\n```bash\ncargo install shaha\n```\n\nOr build from source:\n\n```bash\ngit clone https://github.com/oritwoen/shaha\ncd shaha\ncargo build --release\n```\n\n## Usage\n\n### Build a hash database\n\n```bash\n# Single algorithm (default: sha256)\nshaha build words.txt\n\n# Multiple algorithms\nshaha build words.txt -a md5 -a sha256 -a keccak256\n\n# Custom output file\nshaha build words.txt -o mydb.parquet\n\n# With source metadata\nshaha build rockyou.txt -a hash160 -s rockyou\n```\n\n### Query for preimage\n\n```bash\n# Find preimage by hash\nshaha query 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8\n\n# Prefix search\nshaha query 5e8848\n\n# Filter by algorithm\nshaha query 5e8848 -a sha256\n\n# Output formats\nshaha query 5e8848 --format plain   # default\nshaha query 5e8848 --format json\nshaha query 5e8848 --format table\n```\n\n### Database info\n\n```bash\nshaha info hashes.parquet\n```\n\nOutput:\n```\nDatabase: \"hashes.parquet\"\nRecords:  1000000\nSize:     45.32 MB\nAlgorithms: sha256, md5, keccak256\nSources:  rockyou\n```\n\n## Algorithms\n\n| Name | Description | Output |\n|------|-------------|--------|\n| `md5` | MD5 | 128 bit |\n| `sha1` | SHA-1 | 160 bit |\n| `sha256` | SHA-256 | 256 bit |\n| `sha512` | SHA-512 | 512 bit |\n| `hash160` | RIPEMD160(SHA256(x)) - Bitcoin addresses | 160 bit |\n| `hash256` | SHA256(SHA256(x)) - Bitcoin blocks/txids | 256 bit |\n| `keccak256` | Keccak-256 - Ethereum | 256 bit |\n| `blake3` | BLAKE3 | 256 bit |\n| `ripemd160` | RIPEMD-160 | 160 bit |\n\n## Storage Format\n\nDatabases are stored as [Apache Parquet](https://parquet.apache.org/) files with ZSTD compression.\n\nSchema:\n- `hash` (Binary) - hash bytes\n- `preimage` (Utf8) - original input data\n- `algorithm` (Utf8) - algorithm name\n- `sources` (List\u003cUtf8\u003e) - wordlist origins\n\nParquet files can be queried with DuckDB, Polars, Spark, or Cloudflare R2 SQL.\n\n## Use Cases\n\n- **Security research** - reverse hash lookups\n- **CTF challenges** - quick hash cracking\n- **Forensics** - identify known passwords\n- **Blockchain analysis** - Bitcoin/Ethereum address research\n\n## Configuration\n\nConfiguration is loaded from (in order of priority):\n1. CLI flags\n2. Environment variables\n3. `.shaha.toml` in current directory\n4. `~/.config/shaha/config.toml`\n\n### Example config file\n\n```toml\n[storage.r2]\nendpoint = \"https://account-id.r2.cloudflarestorage.com\"\nbucket = \"my-bucket\"\naccess_key_id = \"your-access-key\"\nsecret_access_key = \"your-secret-key\"\nregion = \"auto\"\npath = \"hashes.parquet\"\n\n[defaults]\nalgorithms = [\"sha256\", \"md5\"]\noutput = \"hashes.parquet\"\n```\n\n### R2/S3 Storage\n\nBuild and query directly from Cloudflare R2 or S3-compatible storage:\n\n```bash\n# Build to R2\nshaha build words.txt --r2\n\n# Query from R2\nshaha query 5e8848 --r2\n```\n\nEnvironment variables:\n- `SHAHA_R2_ENDPOINT` - S3/R2 endpoint URL\n- `SHAHA_R2_BUCKET` - Bucket name\n- `SHAHA_R2_ACCESS_KEY_ID` or `AWS_ACCESS_KEY_ID`\n- `SHAHA_R2_SECRET_ACCESS_KEY` or `AWS_SECRET_ACCESS_KEY`\n- `SHAHA_R2_PATH` - Path within bucket\n- `SHAHA_R2_REGION` - Region (default: \"auto\")\n\n## Roadmap\n\n- [ ] [R2 Data Catalog](https://developers.cloudflare.com/r2/data-catalog/) - Apache Iceberg integration for faster queries\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foritwoen%2Fshaha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foritwoen%2Fshaha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foritwoen%2Fshaha/lists"}