[ord(s) for s in text]
[bin(ord(s)) for s in text]
[bin(ord(s))[2:] for s in text]
[bin(ord(s)[2:].zfill(8) for s in text]
''.join([bin(ord(s)[2:].zfill(8) for s in text])
bit_pattern = ''.join([bin(ord(s)[2:].zfill(8) for s in text])
table = {i: s for i, s in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')}
bit 패턴을 base64 테이블의 값으로 치환하기 위해 6bit 크기의 chunk로 순회한다
[bit_pattern[i:i + 6] for i in range(0, len(bit_pattern), 6]
chunk를 int로 변환한다
[int(bit_pattern[i:i + 6], 2) for i in range(0, len(bit_pattern), 6]
[table[int(bit_pattern[i:i + 6], 2)] for i in range(0, len(bit_pattern), 6]
''.join([table[int(bit_pattern[i:i + 6], 2)] for i in range(0, len(bit_pattern), 6])
text = "Life itself is a quotation."
table = {i: s for i, s in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')}
bit_pattern = ''.join([bin(ord(s)[2:].zfill(8) for s in text])
base64 = ''.join([table[int(bit_pattern[i:i + 6], 2)] for i in range(0, len(bit_pattern), 6])
# base64 : TGlmZSBpdHNlbGYgaXMgYSBxdW90YXRpb24u
table = {s: i for i, s in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')}
[table[s] for s in base64]
[bin(table[s]) for s in base64]
[bin(table[s])[2:] for s in base64]
[bin(table[s])[2:].zfill(6) for s in base64]
''.join([bin(table[s])[2:].zfill(6) for s in base64])
bit_pattern = ''.join([bin(table[s])[2:].zfill(6) for s in base64])
[bit_pattern[i:i + 8] for i in range(0, len(bit_pattern), 8)]
[int(bit_pattern[i:i + 8], 2) for i in range(0, len(bit_pattern), 8)]
[chr(int(bit_pattern[i:i + 8], 2)) for i in range(0, len(bit_pattern), 8)]
''.join([chr(int(bit_pattern[i:i + 8], 2)) for i in range(0, len(bit_pattern), 8)])
base64 = 'TGlmZSBpdHNlbGYgaXMgYSBxdW90YXRpb24u'
table = {s: i for i, s in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')}
bit_pattern = ''.join([bin(table[s])[2:].zfill(6) for s in base64])
text = ''.join([chr(int(bit_pattern[i:i + 8], 2)) for i in range(0, len(bit_pattern), 8)])
# text : Life itself is a quotation.
def conv(text, bin_func, str_func, before_chunk, after_chunk):
b = ''.join(bin(bin_func(s))[2:].zfill(before_chunk) for s in text)
return ''.join([str_func(int(b[i:i + after_chunk], 2)) for i in range(0, len(b), after_chunk)])
def encode(text: str):
table = {i: s for i, s in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')}
return conv(
text=text,
bin_func=ord,
str_func=lambda x: table[x],
before_chunk=8,
after_chunk=6
)
def decode(text: str):
table = {s: i for i, s in enumerate('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/')}
return conv(
text=text,
bin_func=lambda x: table[x],
str_func=chr,
before_chunk=6,
after_chunk=8
)