当前位置: 首页 > 工具软件 > 伏羲 > 使用案例 >

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

阳宗清
2023-12-01

八卦的阴阳刚好可以跟计算机中的“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 time
codelist = []
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

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

 类似资料: