欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

python实现用伏羲八卦对ASCII码进行加密

时间:2023-05-25

八卦的阴阳刚好可以跟计算机中的“0”,“1”相对,所以我试着将ASCII码表中包含的字符转化为用八卦卦象表示,并用python制作了一个简单的加密解密程序。因为最近才接触编程,技术浅陋,某些段落可能使人血压飙升(其实我自己就看着很难受,但苦于能力不足,找不到好的替代方法)。

众所周知,ASCII码如果表示为二进制,一般表示为八位二进制数字(一个字节)。

如小写字母a表示为01100001。因为ASCII码第一位都是0,所以我将0去掉,变为1100001。然后按照1-3-3结构分割,成为1-100-001。

然后进行转化

首先因为第一个部分只会是“1”或“0”,所以把第一个部分的“0”转化为“逆”,“1”转化为“正”。就得到 正-100-001。

然后把后两个部分的“1”对应为“阳”,“0”对应为“阴”,可以得到 正-阳阴阴-阴阴阳。

最后按照卦象,阳阴阴对应艮卦,阴阴阳对应震卦,所以最后得到的结果是 正-艮-震,即正艮震。

至此,字母a对应为“正艮震”。

以下为加密/解密程序源码。

import timecodelist = []fuxi = ['坤', '震', '坎', '兑', '艮', '离', '巽', '乾']Judge = int(input('扣1加密,扣0解密'))if Judge == 1: strlist = input("在此输入要加密的字符(仅支持ASCII码支持的字符)") for character in strlist: if len(bin(ord(character)).replace('0b', '')) == 7 : codelist.append(str(bin(ord(character)).replace('0b',''))) else: codelist.append('0'+str(bin(ord(character)).replace('0b', ''))) for code in codelist: code3 = [] code2 = list(code) if code2[0] == '0': cncode0 = '逆' else: cncode0 = '正' cncode1 = str(fuxi[int(str(code2[1]+code2[2]+code2[3]), 2)]) cncode2 = str(fuxi[int(str(code2[4]+code2[5]+code2[6]), 2)]) cncode = cncode0+cncode1+cncode2 print(cncode, end='~')elif Judge == 0: string = input("在此输入要解密的密码") cncodelist = string.split('~') del cncodelist[-1] for cncode in cncodelist: cncodesplit = list(cncode) if cncodesplit[0] == '逆': code1 = '0' else: code1 = '1' if len(str(bin(fuxi.index(cncodesplit[1])).replace('0b', ''))) == 3: code2 = str(bin(fuxi.index(cncodesplit[1])).replace('0b', '')) elif len(str(bin(fuxi.index(cncodesplit[1])).replace('0b', ''))) == 2: code2 = '0'+str(bin(fuxi.index(cncodesplit[1])).replace('0b', '')) else : code2 = '00'+str(bin(fuxi.index(cncodesplit[1])).replace('0b', '')) if len(str(bin(fuxi.index(cncodesplit[2])).replace('0b', ''))) == 3: code3 = str(bin(fuxi.index(cncodesplit[2])).replace('0b', '')) elif len(str(bin(fuxi.index(cncodesplit[2])).replace('0b', ''))) == 2: code3 = '0'+str(bin(fuxi.index(cncodesplit[2])).replace('0b', '')) else : code3 = '00'+str(bin(fuxi.index(cncodesplit[2])).replace('0b', '')) code = code1+code2+code3 character = chr(int(code, 2)) print(character,end='')time.sleep(0.5)input('')

附带一个加密的例子:

这是B站首页网址:哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

这是加密后的效果:正离坤~正巽艮~正巽艮~正巽坤~正巽兑~逆乾坎~逆离乾~逆离乾~正巽乾~正巽乾~正巽乾~逆离巽~正艮坎~正离震~正离艮~正离震~正艮坎~正离震~正离艮~正离震~逆离巽~正艮兑~正离乾~正离离~逆离乾~

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。