import sys,random,cryptomath
SYMBOLS=""" !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"""
def main():
myMessage=""""A computer would deserve to be called intelligent if it could
deceive a human into believing that it was human." -Alan Turing"""
myKey=2023
myMode='encrypt'
if myMode=='encrypt':
translated=encryptMessage(myKey,myMessage)
elif myMode=='decrypt':
translated=decryptMessage(myKey,myMessage)
print('Key:%s'%(myKey))
print('%sed text:'%(myMode.title()))
print(translated)
print('完全%sed文本复制到剪贴板。'%(myMode))
def getKeyParts(key): keyA = key // len(SYMBOLS) keyB = key%len(SYMBOLS) return(keyA,keyB)def checkKeys(keyA) ,keyB,mode):如果keyA == 1且mode == 'encrypt':sys.exit('当密钥A设置为1时,仿射密码变得非常弱。选择一个不同的密钥。')如果keyB == 0并且模式== '加密':sys.exit('仿射密码变为'键B设置为0时非常弱。选择一个不同的键。')如果keyA <0或keyB <0或keyB> len(SYMBOLS) - 1:sys.exit('键A必须大于0且键B必须介于0和%s之间。'%(len(SYMBOLS) - 1))if cryptomath.gcd(keyA, len(SYMBOLS))!= 1: sys.exit('键A(%s)和符号集大小(%s)不是相对素数。选择不同的键。'%(keyA,LEN(符号)))
def encryptMessage(key,message):
keyA,keyB=getKeyParts(key)
checkKeys(keyA,keyB,'encrypt')
ciphertext=''
for symbol in message:
如果符号在SYMBOLS中: symIndex = SYMBOLS.find(symbol) 密文+ = SYMBOLS [(symIndex * keyA + keyB)%len(SYMBOLS)] else: 密文+ =符号 返回密文def decryptMessage(key,message): keyA,keyB = getKeyParts (key) checkKeys(keyA,keyB,'decrypt') plaintext ='' modInverseOfkeyA = cryptomath.findModInverse(keyA,len(SYMBOLS)) 用于消息 中的符号:如果符号在SYMBOLS中: symIndex = SYMBOLS.find(symbol) plaintext + =符号[(symIndex-keyB)* modInverseOfkeyA%len(SYMBOLS)] else: 明文+ =符号 返回明文
def getRandomKey(): while: keyA = random.randint(2,len(SYMBOLS)) keyB = random.randint(2,len(SYMBOLS)) 如果gcd(keyA,len(SYMBOLS))== 1: return keyA * len(SYMBOLS)+ keyB如果__ name __ ==' __ main __ ':main()` ` `
py写的玩
最新推荐文章于 2023-01-17 11:37:22 发布