ROT13 (ROT-13) je jednoduchá monoalfabetická substituční šifra nad abecedou 26 znaků anglické abecedy. ROT13 je speciálním případem Caesarovy šifry.
Šifrování a dešifrování
K šifrování a dešifrování je použita operace posunu (rotace) abecedy o 13 znaků. Pokud abecedu zapíšeme do dvou řádků o třinácti znacích, tak šifrujeme a dešifrujeme tím způsobem, že nahrazuje písmena z prvního řádku odpovídajícími písmeny z druhého řádku (a písmena druhého řádku písmeny řádku prvního).
Příklady
EMAMAMASO ⇔ RZNZNZNFB
UTOKZASVITANI ⇔ HGBXMNFIVGNAV
ZASILKANACESTE ⇔ MNFVYXNANPRFGR
UTOKZASVITANI ⇔ HGBXMNFIVGNAV
ZASILKANACESTE ⇔ MNFVYXNANPRFGR
Kód
/**
* ROT13
* @param text text obsahujici pouze velke znaky anglicke abecedy
* @return sifrovany text pokud byl vstupem otevreny text, desifrovany text, pokud byl vstupem sifrovany text
*/
public static String rot13(String text) {
StringBuilder builder = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) < 'A' || text.charAt(i) > 'Z') {
throw new IllegalArgumentException("Text must contain only uppercase english letters");
}
builder.append((char) ('A' + ((text.charAt(i) - 'A' + 13) % 26)));
}
return builder.toString();
}