Secrets & PII Scrubber
Paste a log, stack trace or config file and mask personal data and credentials before you post it in a ticket, chat or AI prompt. Choose full redaction, partial masking, consistent pseudonyms or short hashes, and review every change in a highlighted diff.
Private by design: anything you enter is processed in your browser only. It is never uploaded to or logged on our servers. Share links contain only your detector and masking settings, never the text you paste.
Optional LABEL = prefix. If the pattern has a capture group, only group 1 is masked.
Findings by type
| Type | Found | Unique | Masked preview |
|---|
Previews always use partial masking, so original values are never shown in this table. Detection is best-effort: read the output before you share it.
About scrubbing secrets and PII from logs
Logs, HAR files, crash reports and config dumps routinely contain things that should never leave your machine: customer email addresses and phone numbers, card numbers, session tokens, database URLs with embedded passwords and cloud access keys. Once that text is pasted into a ticket, a public issue, a chat channel or an AI assistant it is copied, indexed and retained by systems you do not control, and a leaked access key can be abused within minutes. This scrubber removes those values locally, before the text goes anywhere.
Each detector combines a pattern with a validation step to keep false positives down. Card numbers must have 13–19 digits and pass the Luhn checksum, IBANs must pass the ISO 13616 mod-97 check, IPv6 candidates are parsed group by group, and AWS secret keys are only matched when they follow a secret-style key name, because a bare 40-character Base64 string is indistinguishable from a hash. Phone detection is deliberately conservative: it matches international + numbers and separated North American formats, not every long run of digits, so order IDs and timestamps survive. When two detectors overlap, the more specific one wins (a JWT inside an Authorization header is reported as a JWT).
Pick the masking mode that fits the reader. Full redaction is the safest for public posts. Partial masking keeps the last four digits or the email domain so support staff can still match a record. Consistent pseudonyms replace each distinct value with a stable placeholder (EMAIL_1, IP_2), so you can still follow one user or host through a log without knowing who they are. Short hashes do the same across separate files, but an unsalted hash of a low-entropy value such as a phone number can be reversed by brute force, so treat it as pseudonymisation, not anonymisation.
Use it before attaching logs to bug reports, together with the log analyzer for spotting error spikes, or before sharing a HAR capture in the HAR viewer. To inspect a token you found rather than hide it, use the JWT decoder; to check whether a number is a real card or IBAN, use the credit card & IBAN validator; and for test fixtures that never contained real people in the first place, generate them with the mock data generator. Custom patterns can be tried out first in the regex tester.
Reference Guide
Built-in detectors, in priority order (all examples are fake):
| Detector | What is matched | Example |
|---|---|---|
| Private key blocks | From -----BEGIN … PRIVATE KEY----- to the matching END line (RSA, EC, OpenSSH, PKCS#8, PGP) | -----BEGIN RSA PRIVATE KEY----- |
| URLs with credentials | user:password between :// and @ in any scheme | postgres://app:S3cret@db.internal/app |
| JWT | Three Base64URL segments where header and payload start with eyJ | eyJhbGciOi….eyJzdWIiOi….sig |
| AWS access key ID | AKIA (long-term) or ASIA (temporary) + 16 uppercase letters/digits | AKIAIOSFODNN7EXAMPLE |
| AWS secret access key | 40 Base64 characters, only after a key name containing secret and = or : | aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY |
| GitHub token | ghp_, gho_, ghu_, ghs_, ghr_ + 36 or more characters, or github_pat_ | ghp_ followed by 36 letters and digits |
| Slack token | xoxb-, xoxa-, xoxp-, xoxr-, xoxs- followed by the token body | xoxb-0000000000-FAKE… |
| Stripe key | sk_, pk_ or rk_ + live_/test_ + key body | sk_test_FAKE… |
| Google API key | AIza + 35 characters | AIza + 35 letters, digits, - or _ |
| Authorization header | Token after Bearer, or after Authorization: Basic/Token | Authorization: Bearer abc123def456 |
| Password / secret key-value | Value of keys ending in password, passwd, pwd, secret, token, api_key, access_key, client_secret… in key=value, key: value and JSON | "password": "hunter2", DB_PASSWORD=changeme |
| Email address | local@domain.tld | jane.doe@example.com |
| IBAN | Country code, 2 check digits and 11–30 characters, with or without spaces; must pass mod-97 | GB82 WEST 1234 5698 7654 32 |
| Credit card number | 13–19 digits (spaces or dashes allowed) starting with 2–6 and passing Luhn | 4111 1111 1111 1111 |
| IPv4 / IPv6 | Dotted quads with octets 0–255; IPv6 with full or ::-compressed groups | 203.0.113.42, 2001:db8::8a2e:370:7334 |
| Phone number | + country code with 8–15 digits in total, or (415) 555-0123 / 415-555-0123 / 415.555.0123 | +44 20 7946 0958 |
Masking modes:
| Mode | Card | Reversible? | |
|---|---|---|---|
| Full redaction | [REDACTED:EMAIL] | [REDACTED:CREDIT_CARD] | No |
| Partial mask | j***@example.com | **** **** **** 1111 | No, but keeps hints |
| Pseudonym | EMAIL_1 | CARD_1 | Only with the original text; numbering restarts per run |
| Short hash | [EMAIL#5f1a…] | [CARD#9c3e…] | Guessable for low-entropy values |
Limitations. Regex detection is best-effort. It will miss names, postal addresses, national ID numbers, secrets with no recognisable prefix or key name, and values split across lines or encoded (Base64, URL-encoding). A random digit string can occasionally pass Luhn, and a version number can look like an IPv4 address. Always review the highlighted output before sharing, and rotate any credential that was exposed even briefly: scrubbing a copy does not un-leak the original.
Example input
2025-03-14T09:21:07Z INFO login ok user=jane.doe@example.com ip=203.0.113.42
2025-03-14T09:21:09Z WARN payment declined card=4111 1111 1111 1111 phone=+1 415 555 0123
2025-03-14T09:21:11Z DEBUG db connect postgres://app_user:S3cr3tPassw0rd@10.0.4.17:5432/orders
aws_access_key_id=AKIAIOSFODNN7EXAMPLE
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
{"user":"carol","password":"hunter2","retry":3}
This sample loads automatically when you open the tool. Use Load Sample to bring it back.
Frequently Asked Questions
It finds and masks API keys, access tokens, JWTs, private keys, passwords in key-value pairs, email addresses, phone numbers, card numbers, IBANs and IP addresses, so logs and snippets can be shared safely.
No. Detection and masking run entirely in your browser, and the input is never included in share links.
Yes. Detection is pattern-based, so unusual secret formats can slip through. Always review the output before posting it, and rotate any credential that was exposed.
Related Tools
All Security Tools →Credit Card & IBAN Validator
Check credit card numbers with the Luhn algorithm and detect...
AWS IAM Policy Viewer & Analyzer
Visualize AWS IAM policy JSON as readable statements, see wh...
JWT Secret Key Generator Online
Generate cryptographically secure random secret keys for JWT...
Meta Tag Analyzer & SEO Checker
Analyze and optimize meta title, description, and Open Graph...
SEO URL Slug Generator
Convert titles and text into clean, SEO-friendly URL slugs....
Keyword Density Checker
Analyze keyword frequency and density in your content to imp...