Cyrillic Caesar cipher
With a shift of 3, “Привет, мир!” becomes “Тулезх, плу!”: each of the 33 Russian letters, Ё included, moves three places and wraps from Я back to А. Latin letters, digits and punctuation stay as they are. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- Привет, мир!
- Shift
- 3
- Calculation mode
- Encrypt
- Result
- Тулезх, плу!
- Shift mod 33
- 3
- Length
- 12
- Letters shifted
- 9
The Cyrillic Caesar cipher applies the classic modular letter shift to the thirty-three letter Russian alphabet rather than to Latin A through Z. Each uppercase letter from А through Я, including Ё as its own position after Е, moves forward by your chosen integer offset and wraps at the end of the circle; lowercase letters follow the same table so case is preserved. Decryption reverses the shift with the same key, or you can encrypt again with a negative offset. Latin letters, digits, spaces, punctuation, emoji, and other scripts stay in place and are counted so mixed-language homework and chat snippets remain readable. You send the text, a whole-number shift, and an optional encrypt or decrypt mode.
How a Cyrillic Caesar shift encrypts and decrypts Russian text
A Cyrillic Caesar cipher treats the thirty-three Russian letters as a circle ordered А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я, with matching lowercase partners. For encryption, each Russian letter is replaced by the letter that sits N places ahead on that circle, wrapping from Я back to А and treating Ё as a full alphabet member rather than a decorative variant of Е.
For decryption, the same key is applied in reverse: each letter moves N places backward, which is equivalent to encrypting the ciphertext with shift negative N. Case is preserved so uppercase ПРИВЕТ with shift three becomes a different uppercase string while lowercase letters stay lowercase. Characters outside the Russian tables—including Latin A–Z, digits, spaces, commas, Ukrainian-only letters that are not in the Russian set, and emoji—are copied unchanged and accumulate into non-Cyrillic statistics so you can see what the transform ignored.
Mathematically the operation is modular arithmetic modulo thirty-three: normalize the signed integer key into the range zero through thirty-two, map each Russian letter to an index zero through thirty-two, add the key, take the remainder, and map back to a character of the same case. A shift of thirty-three is the identity; a shift of thirty-six equals three; a shift of negative three equals a forward shift of thirty. There is no network call, no random seed, and no wall-clock timestamp in the path.
This page implements the classical single-alphabet Russian Caesar shift, not Latin Caesar, not Vigenère, not AES, and not automatic frequency-analysis key recovery—those remain separate tools and search intents.
Where Cyrillic Caesar tools show up in real work
Introductory cryptography and Slavic-language courses assign Caesar drills so students practice modular arithmetic on a non-Latin alphabet before they meet block ciphers; a single trusted oracle that encrypts and decrypts with an explicit integer key speeds homework demos and auto-graders that must handle Ё correctly. Capture-the-flag warm-ups and puzzle hunts still hide Russian ROT-style messages in plain sight, and solvers want a fast, predictable shifter rather than a general cryptanalysis suite or a Latin-only tool that mangles Cyrillic code points.
Support and content teams sometimes lightly obfuscate spoilers, quiz answers, or internal Russian labels with a trivial rotation and need the reverse path without installing a language-specific crypto library. If you need strong authenticated encryption, multi-letter Vigenère keys, Latin Caesar only, Base64 encoding, or automatic frequency-analysis key recovery, treat those as separate search intents and landings rather than overloading this classical Cyrillic Caesar shift page.
What you can do with it
Classroom modular-arithmetic demos on Russian text
Encrypt and decrypt sample Russian sentences with a known integer shift so algebra and intro-crypto lessons share one ground-truth transform that treats Ё as a real letter.
Puzzle and CTF warm-up Cyrillic shifts
Apply or reverse a fixed Russian letter rotation on challenge strings without writing a one-off script for every problem set.
FAQ
What is a Cyrillic Caesar cipher?
A classical substitution cipher that rotates each Russian letter by a fixed integer distance on the thirty-three letter alphabet circle (modulo 33), including Ё. Non-Russian characters are left unchanged and reported.
How do I decrypt text?
Set mode to decrypt with the same integer shift used to encrypt, or encrypt with the negated shift. Both reverse the rotation.
What if my shift is not an integer?
Caesar keys must be whole numbers; fractional shifts such as 3.5 are rejected and not charged.
What does it cost?
The browser tool is free and runs locally.
Does Ё count as a separate letter?
Yes. Ё sits in its own position right after Е and is treated as a full member of the alphabet, not as a variant of Е. That is why the circle has 33 letters and a shift of 33 changes nothing.
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/enc/caesar-cyrillic \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Привет, мир!","shift":3}'const res = await fetch("https://api.kit.forhosting.com/enc/caesar-cyrillic", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Привет, мир!",
"shift": 3
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/caesar-cyrillic",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Привет, мир!",
"shift": 3
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/caesar-cyrillic", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Привет, мир!","shift":3}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Привет, мир!","shift":3}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/caesar-cyrillic", 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": "Привет, мир!",
"shift": 3
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.caesar_cyrillic",
"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
Non-integer shifts are rejected with invalid_input so auto-graders never silently round a bad key.
How a Cyrillic Caesar shift encrypts and decrypts Russian text
Because every step is integer arithmetic with no floating-point rounding of the key itself, the transform is fully deterministic: identical text, shift, and mode always produce identical JSON.
What you send and what you get back
Send a required string field named text, a required integer field named shift, and an optional mode field set to encrypt or decrypt. Encrypt mode rotates Russian letters forward by shift; decrypt mode rotates them backward by the same absolute distance. When mode is omitted, encrypt is the default so a minimal payload still does useful work. On success the response echoes mode, the original text, the integer shift you supplied, shift_mod_33 as the effective forward rotation after mode and modulo thirty-three, the transformed result string, length of that result, letters_shifted as a count of how many Russian letters were rotated, non_cyrillic_count as how many characters were left untouched because they are not Russian letters, non_cyrillic_chars as the unique non-Cyrillic characters in order of first appearance, plus alphabet and cipher labels for clients that assert the profile they hit. Missing text, missing shift, non-string objects for text, unsupported mode values, strings longer than the documented maximum, and any non-integer shift—including floating values such as three point five or numeric strings with a decimal point—fail with invalid_input and a clear English message. Validation failures do not consume prepaid balance. Classic checks include encrypting a short Russian greeting with shift three, decrypting that ciphertext back to the original, confirming that commas and Latin fragments appear in non_cyrillic_chars, and verifying that a fractional shift is rejected rather than rounded. Pricing for successful API calls is the published base of $0.002 per item.
Where Cyrillic Caesar tools show up in real work
Because this capability is a pure parse engine, API pricing is the published base of $0.002 per successful item and failed validation does not consume balance.
Integration use cases
Mixed-script spoiler and label obfuscation
Rotate Russian quiz answers or internal labels with a trivial key, keep Latin notes readable, and decrypt later with the same contract in browser or API.
Technical questions
Are Latin letters, spaces, and punctuation encrypted?
No. Only the thirty-three Russian letters rotate. Latin letters, digits, spaces, punctuation, and other scripts pass through and appear in non_cyrillic_chars.