Atbash cipher encoder/decoder
Hello becomes Svool: Atbash swaps each letter for its mirror in the alphabet, A with Z and B with Y, keeping capitals and leaving digits and punctuation alone. Run the result through again and you get the original back. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- Hello
- Result
- Svool
Apply the Atbash substitution cipher (A↔Z) on Latin letters. Search intent: atbash cipher decoder encoder. No network calls, no random seeds, and no server state are required for a correct answer.
How the Atbash mirror works
Atbash is a substitution cipher with a single fixed rule: write the alphabet forwards, write it backwards underneath, and swap each letter for the one below it. A becomes Z, B becomes Y, C becomes X, and so on until M and N trade places in the middle. Uppercase letters stay uppercase and lowercase letters stay lowercase, which is why Hello becomes Svool. Digits, spaces, punctuation and any other character pass through untouched, so word lengths and the shape of each sentence remain visible in the encoded text.
One step to encode and decode
Because the mirror works in both directions, applying Atbash twice brings back the original letters. You never need to choose a decoding mode: paste plain text to encode it, or paste Atbash text to read it, and the same step does both. The same input always gives the same result, with no key, no randomness and no connection needed. That also means Atbash hides nothing from anyone who knows the rule, so it is best suited to showing how substitution ciphers work and to checking an encoded line quickly.
How it works
Apply the Atbash substitution cipher (A↔Z) on Latin letters. Involutive: encoding twice returns the original letters. The implementation is pure JavaScript with no external services.
No network calls, no random seeds, and no server state are required for a correct answer. Failed jobs are not billed. Landings target the stated search intent with precise keywords.
Prefer explicit units and ranges over silent coercion of bad types. When a field is optional, defaults are documented in params and echoed in the output.
When to use it
Use this when your search intent matches the calculator name and you need a reproducible answer for teaching, finance ops, GIS, text tooling, or unit history work. Apply the Atbash substitution cipher (A↔Z) on Latin letters. No network calls, no random seeds, and no server state are required for a correct answer.
Failed jobs are not billed. Landings target the stated search intent with precise keywords. Prefer explicit units and ranges over silent coercion of bad types.
When a field is optional, defaults are documented in
FAQ
Does it call the network?
No. All math and text transforms are local and deterministic.
How do I decode an Atbash message?
Paste it in and apply the same cipher. Atbash is its own inverse, so encoding twice gives back the original. Svool, for example, turns back into Hello. There is no separate decoding mode to choose.
Which characters does the Atbash cipher change?
Only the letters A to Z, uppercase and lowercase, and each keeps its case. Digits, spaces, punctuation and every other character come out exactly as you typed them.
Can Atbash protect a secret message?
No. It has no key: the same letter always becomes the same letter, so anyone who knows the rule can read the message. It is useful for teaching how substitution ciphers work, not for keeping secrets.
What does swapping A with Z actually mean?
The alphabet is folded in half and each letter trades places with its partner on the other side. A pairs with Z, B with Y, C with X, and so on until M and N swap in the middle.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/text/atbash \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Hello"}'const res = await fetch("https://api.kit.forhosting.com/text/atbash", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Hello"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/text/atbash",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Hello"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/text/atbash", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Hello"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Hello"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/text/atbash", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "Hello"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "text.atbash",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation,
How it works
The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
Inputs, limits and rounding
Optional decimals use half-up once. No network calls, no random seeds, and no server state are required for a correct answer. Failed jobs are not billed. Landings target the stated search intent with precise keywords. Prefer explicit units and ranges over silent coercion of bad types. When Provide the required parameters as JSON numbers or strings as documented. Invalid types, missing required fields, or out-of-range values raise invalid_input with a clear message. Outputs echo key inputs so automation can log the full context of each call. The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
When to use it
The calculator is free in the browser, deterministic, and identical in the API path. Inputs are validated before any arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE results when decimals are requested. Use the same JSON contract from spreadsheets, CMS hooks, automation, or teaching demos.
Integration use cases
Quick check
Paste values in the free widget and compare with a spreadsheet.
Automation
Call the API with the same JSON contract from n8n, scripts, or CMS.
Teaching
Show the formula and pinned golden examples without proprietary software.
Technical questions
Is it free in the browser?
Yes. Tier A runs fully client-side with the same core as the API.
What happens on bad input?
The handler throws invalid_input; failed jobs are not billed.
Can I use it from the API?
Yes. Send the same JSON fields documented in params.
Who authors this?
Aspire (elon@forhosting.com), EN-only delivery; Nitro hydrates locales.