シーザー暗号に実用性はありません。
なんとなくやってみましたw
シーザー暗号を使った暗号化と復号化のサンプル
シーザー暗号を使って文字列を暗号化。
その後、暗号化した文字列を復号します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public class CaesarCipherTest { public static void main(String[] args) { //元のテキスト String str = "Hello, World!"; //暗号化(1文字ずらす) String encStr = encrypt(str, 1); System.out.println("暗号化されたテキスト:" + encStr); //複合化(1文字戻す) String decText = decrypt(encStr, 1); System.out.println("復号化されたテキスト:" + decText); } public static String encrypt(String str, int shift) { //1文字ずつ文字を回転 StringBuilder sb = new StringBuilder(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); if (Character.isLetter(c)) { //回転の起点(大文字、小文字のA) char ch = Character.isLowerCase(c) ? 'a' : 'A'; //回転させる c = (char) (ch + (c - ch + shift) % 26); } sb.append(c); } return sb.toString(); } public static String decrypt(String str, int shift) { //逆回転させる(文字数から引く) return encrypt(str, 26 - shift); } } |
実行結果
「Hello, World!」の暗号化、複合化した文字列が出力されます。
1 2 | 暗号化されたテキスト:Ifmmp, Xpsme! 復号化されたテキスト:Hello, World! |
サンプルの解説
A-Z(a-z)を対象に指定の数だけずらします。サンプルではとりあえず1文字ずらしてます。
また、サンプルの文字列には、「,」や「!」が含まれていますが、当然無視していますw
日本語だと文字コード的に難しそうですね。