Blog
ROT13
by Dragon
on 2025-03-26 03:19:08 UTC
Just a little programming exercise that I thought would be fun, creating a simple shift cipher in multiple programming languages for comparison. <br /><br />First up... PHP<br /><br />[code]<br />function rot13($input) <br />{<br /> $output = "";<br /> for ($x = 0; $x < strlen($input); $x++)<br /> {<br /> $ascii = ord($input[$x]);<br /> if ($ascii >= 65 && $ascii <= 77 || $ascii >= 97 && $ascii <= 109) { // A-M & a-m<br /> $output .= chr($ascii + 13);<br /> } else if ($ascii >= 78 && $ascii <= 90 || $ascii >= 110 && $ascii <= 122) { // N-Z & n-z<br /> $output .= chr($ascii - 13); <br /> } else {<br /> $output .= $input[$x];<br /> }<br /> }<br /> return $output;<br />}<br /><br />echo rot13('Hello World!') . '<br>';<br />echo rot13('AaMmNnZz') . '<br>';<br />echo rot13('ABCDefgHIJKlmnopQRStuvWXyz') . '<br>';<br />[/code]<br /><br /><br />Next... C#<br /><br />[code]<br />using System;<br /> <br />public class Program<br />{<br /> public static void Main()<br /> {<br /> Console.WriteLine(rot13("Hello World!"));<br /> Console.WriteLine(rot13("AaMmNnZz"));<br /> Console.WriteLine(rot13("ABCDefgHIJKlmnopQRStuvWXyz"));<br /> }<br /> <br /> public static String rot13(String input) <br /> {<br /> String output = "";<br /> foreach (var letter in input) <br /> {<br /> int ascii = (int)letter;<br /> if (ascii >= 65 && ascii <= 77 || ascii >= 97 && ascii <= 109) { // A-M & a-m<br /> output += (char)(ascii + 13);<br /> } else if (ascii >= 78 && ascii <= 90 || ascii >= 110 && ascii <= 122) { // N-Z & n-z<br /> output += (char)(ascii - 13); <br /> } else {<br /> output += letter;<br /> }<br /> }<br /> return output;<br /> }<br />}<br />[/code]<br /><br />...And now, SQL:<br /><br />[code]<br />ALTER FUNCTION dbo.ROT13<br />(<br /> @PLAINSTRING VARCHAR(255)<br />)<br />RETURNS VARCHAR(255)<br />AS<br />BEGIN<br /> DECLARE @MAX INT = LEN(@PLAINSTRING)<br /> DECLARE @COUNTER INT = 0<br /> DECLARE @LETTER CHAR(1)<br /> DECLARE @ENCODEDSTRING VARCHAR(255)<br /> WHILE (@COUNTER < @MAX)<br /> BEGIN<br /> SET @LETTER = SUBSTRING(@PLAINSTRING, @COUNTER+1, 1);<br /> IF(ASCII(@LETTER) BETWEEN 65 AND 77 OR ASCII(@LETTER) BETWEEN 97 AND 109) -- A-M and a-m<br /> SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, CHAR(ASCII(@LETTER)+13));<br /> ELSE IF(ASCII(@LETTER) BETWEEN 78 AND 90 OR ASCII(@LETTER) BETWEEN 110 AND 122) -- N-Z and n-z<br /> SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, CHAR(ASCII(@LETTER)-13));<br /> ELSE<br /> SET @ENCODEDSTRING = CONCAT(@ENCODEDSTRING, @LETTER);<br /> SET @COUNTER += 1<br /> END<br /> RETURN @ENCODEDSTRING<br />END<br />GO<br />[/code]