本帖最后由 流月汐志 于 2020-1-23 17:41 编辑
根据坛友的思路做的一个 Python 版本的社会主义核心价值观加解密工具,
能力有限,代码粗糙,大家将就着看看。
思路:1. 每个字符(不论中文英文)转成 16 位的二进制,不足的左边补零。
2. 然后拆成 4*4 的二进制字符串。
3. 转十进制,大于等于 11 的,拆分2个;不大于的补零。保证每个 2 位 十进制数
4. 于是得到 8 位 11 以内的十进制数,查社会主义list,即为加密结果。
原帖地址:https://www.52pojie.cn/thread-1081771-1-1.html
效果图
[Python] 纯文本查看 复制代码 def decoder(string):
len_str = len(string)
if len_str % 16 != 0:
return 0
result = ''
for x in range(0, len_str, 16):
decode_char = string[x:x+16]
temp_int = [ENSTRS.index(decode_char[y:y+2]) for y in range(0, 16, 2)]
int_list = [temp_int[x]+temp_int[x+1] for x in range(0, 8, 2)]
bin_temp = [bin(i).replace('0b', '') for i in int_list]
binstr_list = []
for b in bin_temp:
if len(b) < 4:
binstr_list.append(b.zfill(4))
else:
binstr_list.append(b)
binstr = ''.join(binstr_list)
result = result + chr(int(binstr, 2))
return result
def encoder(string):
result = ''
binstr_list = [b.replace('0b', '') for b in [bin(ord(c)) for c in string]]
for binstr in binstr_list:
len_binstr = len(binstr)
if len_binstr < 16:
binstr = binstr.zfill(16)
temp_list = [binstr[start:start+4] for start in range(0, 16, 4)]
int_list = []
for i in temp_list:
i = int(i, 2)
if i >= 11:
int_list.append(11)
int_list.append(i - 11)
else:
int_list.append(0)
int_list.append(i)
result = result + ''.join([ENSTRS[index] for index in int_list])
return result
ENSTRS = ("富强", "民主", "文明", "和谐", "自由", "平等",
"公正", "法治", "爱国", "敬业", "诚信", "友善")
while True:
input_str = input("1. 加密 2. 解密\n请选择:")
if input_str in ['eof', 'EOF', 'quit', 'QUIT', 'exit', 'EXIT']:
break
elif input_str in ['1', '加密']:
encode_str = input("请输入字符串:\n")
result = encoder(encode_str)
print("加密结果:\n{}".format(result))
elif input_str in ['2', '解密']:
decode_str = input("请输入加密字符串:\n")
result = decoder(decode_str)
print("解密结果:\n{}".format(result))
else:
print("输入有误!")
ps: 觉得有点意思的小伙伴们,路过点个热心呗,蟹蟹了~~
|