2025-03-06
一日一C 構造体編に続き、プログラミングで学ぶ暗号の基本。

最も基本的な暗号、紀元前に古代ローマで使われたというシーザー暗号は、文字列を構成する文字の順を一定の数だけずらして、元の文章をわかりにくいものにする方法。例えば、アルファベット順で「1」ずらすと決めた場合、「ABC」は「BCD」、「HELLO」が「IFMMP」となる。


「シーザー暗号」

まったさんの一日一CのC言語による実装を元に、Wirthで実装したものがこちら。

function putchar from "./putchar.js" function getchar from "./getchar.js" function putchars(s) i <- 0 while s[i] putchar(s[i]) i <- i + 1 next end function getchars(s) i <- 0 while s[i] s[i] <- getchar() i <- i + 1 next end function encrypt(s) i <- 0 while s[i] s[i] <- s[i] + 1 i <- i + 1 next end function decrypt(s) i <- 0 while s[i] s[i] <- s[i] - 1 i <- i + 1 next end mojis <- [1, 1, 1, 1, 0] getchars(mojis) encrypt(mojis) putchars(mojis) putchar(10) decrypt(mojis) putchars(mojis) putchar(10)

「src 23.wirth on Wirth a day - 一日一W

encryptで1文字ずらす暗号化、decryptで1文字戻すことで元の文字列に戻る復号化ができます。

指定数ずらす機能 encrypt(s, n) / decrypt(s, n) にしてみましょう!

links
- Pascalリスペクトの教育用構造化プログラミング言語「Wirth」

Tweet
クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS