简单替代密码
简单替换密码是最常用的密码,包括为每个密文文本字符替换每个纯文本字符的算法.在这个过程中,与凯撒密码算法相比,字母表是混乱的.
示例
简单替换密码的密钥通常由26个字母组成.一个示例键是 :
plainalphabet:abcdefghijklmnopqrstuvwxyz cipheralphabet:phqgiumeaylnofdxjkrcvstzwb
使用上述密钥的示例加密是 :
plaintext:defendtheeastwallofthecastle ciphertext:giuifgceiiprctpnnduceiqprcni
以下代码显示了一个实现简单替换密码的程序;
importrandom,sys LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' defmain(): message='' iflen(sys.argv)>1: withopen(sys.argv[1],'r')asf: message=f.read() else: message=raw_input("Enteryourmessage:") mode=raw_input("EforEncrypt,DforDecrypt:") key='' whilecheckKey(key)isFalse: key=raw_input("Enter26ALPHAkey(leaveblankforrandomkey):") ifkey=='': key=getRandomKey() ifcheckKey(key)isFalse: print('Thereisanerrorinthekeyorsymbolset.') translated=translateMessage(message,key,mode) print('Usingkey:%s'%(key)) iflen(sys.argv)>1: fileOut='enc.'+sys.argv[1] withopen(fileOut,'w')asf: f.write(translated) print('Success!Filewrittento:%s'%(fileOut)) else:print('Result:'+translated) #Storethekeyintolist,sortit,convertback,comparetoalphabet. defcheckKey(key): keyString=''.join(sorted(list(key))) returnkeyString==LETTERS deftranslateMessage(message,key,mode): translated='' charsA=LETTERS charsB=key #Ifdecryptmodeisdetected,swapAandB ifmode=='D': charsA,charsB=charsB,charsA forsymbolinmessage: ifsymbol.upper()incharsA: symIndex=charsA.find(symbol.upper()) ifsymbol.isupper(): translated+=charsB[symIndex].upper() else: translated+=charsB[symIndex].lower() else: translated+=symbol returntranslated defgetRandomKey(): randomList=list(LETTERS) random.shuffle(randomList) return''.join(randomList) if__name__=='__main__': main()
输出
您可以观察以下内容当你实现上面给出的代码时输出 :
简单替换密码测试
我们将重点介绍如何使用各种方法测试替换密码,这有助于生成随机字符串,如下面所示 :
importrandom,string,substitution defmain(): foriinrange(1000): key=substitution.getRandomKey() message=random_string() print('Test%s:String:"%s.."'%(i+1,message[:50])) print("Key:"+key) encrypted=substitution.translateMessage(message,key,'E') decrypted=substitution.translateMessage(encrypted,key,'D') ifdecrypted!=message: print('ERROR:Decrypted:"%s"Key:%s'%(decrypted,key)) sys.exit() print('Substutitiontestpassed!') defrandom_string(size=5000,chars=string.ascii_letters+string.digits): return''.join(random.choice(chars)for_inrange(size)) if__name__=='__main__': main()
输出
您可以随机观察输出生成的字符串有助于生成随机纯文本消息,如下所示 :
测试成功完成后,我们可以观察输出消息替换测试通过!.
因此,您可以系统地破解替换密码.
简单替换密码解密
您可以了解替换密码的简单实现,它根据简单替换密码技术中使用的逻辑显示加密和解密的消息.这可以被视为一种替代编码方法.
代码
您可以使用以下代码使用简单替换密码来执行解密;
importrandom chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ'+\ 'abcdefghijklmnopqrstuvwxyz'+\ '0123456789'+\ ':.;,?!@#$%&()+=-*/_<>[]{}`~^"\'\\' defgenerate_key(): """Generateankeyforourcipher""" shuffled=sorted(chars,key=lambdak:random.random()) returndict(zip(chars,shuffled)) defencrypt(key,plaintext): """Encryptthestringandreturntheciphertext""" return''.join(key[l]forlinplaintext) defdecrypt(key,ciphertext): """Decryptthestringandreturntheplaintext""" flipped={v:kfork,vinkey.items()} return''.join(flipped[l]forlinciphertext) defshow_result(plaintext): """Generatearesultingcipherwithelementsshown""" key=generate_key() encrypted=encrypt(key,plaintext) decrypted=decrypt(key,encrypted) print'Key:%s'%key print'Plaintext:%s'%plaintext print'Encrypted:%s'%encrypted print'Decrypted:%s'%decrypted show_result('HelloWorld.Thisisdemoofsubstitutioncipher')
以上就是关于“基于Python怎样制作简单替换密码的程序”的介绍了,感谢各位的阅读,如果大家想要了解更多相关的内容,欢迎关注恒创科技,小编每天都会为大家更新不同的知识。