Technically ROT13 can only handle 26 characters. The "good" version would be to deny any inputs outside an accepted character set.
Ok so this doesn't really matter for a joke algorithm like ROT13 but in more serious cases it's important to refuse any inputs that aren't handled and not try ad-hoc fixes to make them "work".
Caesar ciphers? I believe they are well defined, yes. Although ROT13 itself only dates back to maybe the 70's or 80's.
Besides, I was honestly just using this as an excuse to make a more general point. I've grown frustrated with bugs and security issues arising from "fixing" input to work in a domain which was not designed to handle that input.
But as I said, it doesn't really matter with ROT13 because it isn't a serious algorithm.
Rot13 is not Caesar's cipher. Rot13 is in the family of rotational ciphers, but it's a more modern concept designed around a 26-letter alphabet (so that running it twice produces the plaintext again)
Sure it has its uses for simple obfuscation but in that case my central point is relevant. It's only good for obfuscating ASCII letters.
Btw what's commonly known as Caesar cipher (aka shift cipher) is a generalisation of Caesar's original cypher (described as shifting each character 3 places). ROT13 is different from the "original" as it shifts by 13 characters over a 26 character alphabet. This makes the encode and decode steps the same.
IMO it doesn’t matter whether an algorithm is “serious” or not, it depends solely on how people treat it.
In this story, ROT13 is taken seriously, so it is a serious algorithm. And the creation of such a good version does have it’s value, no matter how useful ROT13 is.
As an aside: After 20 years of IRC usage I read and write rot13 without any technical aids (mostly due to the first 2 years of quakenet). I wouldn't be surprised if you'd find someone who can speak it :)
When I said rot13 isn't defined outside of a certain set, I meant it. If you want ø to be half-rotatable, you need to specify an ordered character set (with an even set size) and say that rot29 or rot128 or whatever you come up with is the analogous mapping to rot13.
Now, rot13 excludes punctuation and keeps capitalization after transform, so an ordinary human can learn to read rot13 English reasonably fluently. I don't know if that is common across all Latin-descended alphabetic languages, but it's really not going to be a plausible skill in Mandarin.
On the other hand, Korean (Hangul) has a perfectly reasonable alphabetic set size and ordering, at least in South Korea. https://en.wikipedia.org/wiki/Hangul#Alphabetic_order -- so I expect that Koreans can learn to read rot12.
I can't say it's correct or incorrect: it's undefined, and this is one way of handling it. For some purposes it might be the best way to handle it, for others it might be bad.
Because rot13 is not defined for a lot of possible inputs, different implementations can produce different results, and not be interoperable.
Ok so this doesn't really matter for a joke algorithm like ROT13 but in more serious cases it's important to refuse any inputs that aren't handled and not try ad-hoc fixes to make them "work".