ASC(s) >= ASC("A") AND ASC(s) <= ASC("Z")(変数sの文字が大文字ならば)
ASC(s) >= ASC("a") AND ASC(s) <= ASC("z")(変数sの文字が小文字ならば)
アルファベット以外の文字
そのまま代入
21-39行目
UWSC
Cipher.Caesar.decode
シーザー暗号でデコードします。
変数sにデコードする文字列から1文字を代入。
変数normalizedNumberにシフトさせる数を0~25の範囲に正規化した数値を代入。
ASC(s) >= ASC("A") AND ASC(s) <= ASC("Z")
マイナスにならないように「+26」する。
AのASCIIコードにシフトする数を加算してから文字に戻す。
ASC(s) >= ASC("a") AND ASC(s) <= ASC("z")
マイナスにならないように「+26」する。
AのASCIIコードにシフトする数を加算してから文字に戻す。
アルファベット以外の文字
そのまま代入
40-42行目
UWSC
FUNCTION ROT13.encode(str)
RESULT = Cipher.Caesar.encode(str, 13)
Cipher.ROT13.encode
ROT13でエンコードします。
シーザー暗号で13文字シフトします。
43-45行目
UWSC
FUNCTION ROT13.decode(str)
RESULT = Cipher.ROT13.encode(str)
Cipher.ROT13.decode
ROT13でデコードします。
暗号化を2回行うと元に戻るので、再度ROT13でエンコード。
46-63行目
UWSC
Cipher.Vigenere.encode
ヴィジュネル暗号でエンコードします。
64-81行目
UWSC
Cipher.Vigenere.decode
ヴィジュネル暗号でデコードします。
82-91行目
UWSC
FUNCTION XOR.encode(str, key)
DIM res = ""
FOR n = 1 TO LENGTH(str)
DIM num = (n - 1) MOD LENGTH(key) + 1
DIM a = ASC(COPY(str, n, 1))
DIM b = ASC(COPY(key, num, 1))
res = res + "" + REPLACE(FORMAT(VARTYPE(decToBin(a XOR b), VAR_INTEGER), 8), " ", "0")
NEXT
RESULT = res
DIM str = "シーザー暗号で暗号化した文字列"
FOR i = 1 TO 26
PRINT i + "<#TAB>" + Cipher.Caesar.decode(str, i)
NEXT
例えばWklv lv d shq.という文字列を解析したい場合は、以下のプログラムで全パターンを出力します。出力された結果の中から、出力された平文を順に調べていくと3番目のThis is a pen.が元の文だということがわかります。
UWSC
DIM str = "Wklv lv d shq."
FOR i = 1 TO 26
PRINT i + "<#TAB>" + Cipher.Caesar.decode(str, i)
NEXT
結果
復号シフト
取得される平文
1
Vjku ku c rgp.
2
Uijt jt b qfo.
3
This is a pen.
4
Sghr hr z odm.
5
Rfgq gq y ncl.
6
Qefp fp x mbk.
7
Pdeo eo w laj.
8
Ocdn dn v kzi.
9
Nbcm cm u jyh.
10
Mabl bl t ixg.
11
Lzak ak s hwf.
12
Kyzj zj r gve.
13
Jxyi yi q fud.
14
Iwxh xh p etc.
15
Hvwg wg o dsb.
16
Guvf vf n cra.
17
Ftue ue m bqz.
18
Estd td l apy.
19
Drsc sc k zox.
20
Cqrb rb j ynw.
21
Bpqa qa i xmv.
22
Aopz pz h wlu.
23
Znoy oy g vkt.
24
Ymnx nx f ujs.
25
Xlmw mw e tir.
26
Wklv lv d shq.
ROT13
ROT13は単一換字式暗号(シーザー暗号)の一種で、平文の各文字を13字分シフトして作る暗号のことです。例えばAをN、BをOに置換します。ROTate by 13 placesの略。暗号化と復号が同じ処理でとても単純なのもこの暗号の特徴。アルファベットが26文字であるのに対し、暗号化は13文字シフトするので2回処理をすると元の文に戻ります。