最も基本的な暗号、紀元前に古代ローマで使われたというシーザー暗号は、文字列を構成する文字の順を一定の数だけずらして、元の文章をわかりにくいものにする方法。例えば、アルファベット順で「1」ずらすと決めた場合、「ABC」は「BCD」、「HELLO」が「IFMMP」となる。
One good C code a day.
— Yuichi Ray Matta (@yrm__) February 25, 2025
一日一C。
#23 #caday_yrm pic.twitter.com/4CueRomGXn
まったさんの一日一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) にしてみましょう!