print("hello world")hello world
print("hello world")hello world
%%lscipher.html cipher.qmd cipher.quarto_ipynb cipher_files/
cipher = lambda e, d: (e,d) e is the encryption function.
km
ce = lambda k, m: ""
k = 'key'
m = 'msg'
c = e(k,m)d is the decryption function.
kcm, that is equal to original message.d = lambda k, c: ""
# c is previously defined
m_out = d(k,c)m = ""
assert(d(k,e(k,m)) == m)make_f = lambda k: lambda m: ""
k = 'key'
m = 'msg'
e = make_f(k)
c = e(m)d = make_f(k)
m_out = d(c)m, e, d = "", make_f(k), make_f(k)
assert(d(e(m)) == m)m = ""
assert((make_f(k))((make_f(k))(m)) == m)rs = [ # rotors
"BDFHJLCPRTXVZNYEIWGAKMUSQO", # fast
"AJDKSIRUXBLHWTMCQGZNPYFVOE", # medium
"EKMFLGDQVZNTOWYHXUSPAIBRCJ", # slow
"IXUHFEZDAOMTKQJWNSRLCYPBVG" # reflect
]r = rs[0]make_f = lambda k : lambda a : "" E
_____|______________________
[ ABCDEFGHIJKLMNOPQRSTUVWXYZ ] # alphabet
[ | ]
[ BDFHJLCPRTXVZNYEIWGAKMUSQO ] # cipher
‾‾‾‾‾|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Jabcs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"abcs.index("E")4
r[4]'J'
make_fmake_e = lambda k : lambda a : k[abcs.index(a)]e = make_e(r)e?print("e ->", e, "\ntype(e) -> ", type(e))e -> <function <lambda>.<locals>.<lambda> at 0x7ff95025f130>
type(e) -> <class 'function'>
e to some letter, such as “E”e("E")'J'
d? J
_____|______________________
[ BDFHJLCPRTXVZNYEIWGAKMUSQO ] # cipher
[ | ]
[ ABCDEFGHIJKLMNOPQRSTUVWXYZ ] # alphabet
‾‾‾‾‾|‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
Emake_d = lambda k : lambda a : abcs[k.index(a)]d = make_d(r)dprint("d ->", d, "\ntype(d) -> ", type(d))d -> <function <lambda>.<locals>.<lambda> at 0x7ff95025f760>
type(d) -> <class 'function'>
d to some letter, such as “J”d("J")'E'
m = 'E'
assert(d(e(m)) == m)assert(all([d(e(m)) == m for m in abcs]))assert(all([all([make_d(r)(make_e(r)(m)) == m for m in abcs]) for r in rs]))