首页 > 编程知识 正文

仿射密码加密解密,仿射密码解密过程例题

时间:2023-05-04 02:49:04 阅读:186238 作者:4495

【主题】

1 )仿射密码的实现,具体要求:

a .实现仿射密码加密流程,用户输入密钥,可以对任意输入的明文进行加密;

b .可以基于用户输入的加密密钥自动生成解密密钥和解密密文;

c .实现仿射密码破译程序(包罗万象),能够破译任意输入的密文

【安装代码】

----coding : utf-8---' ' createdonsundec 1720336003360092017仿射密码加密、解密、 @ author : HP ' ' fromstringimportascii _ lowercaseaslowercasefromstringimportascii _ uppercaseasuppercasefrequencytaback 24、22、6、1、21、 10、23、9、16, 25 )删除保留的标点符号#文本过滤deftext_filter(text ) : text=text.lower ) result=''forIinrange ) text ) ) 33330 加密部分defencryption(plaintext,k1,k2 ) : plaintext=text _ filter (plaintext ) result=' ' forinrange (len (plaintint,plating ) ) result=upper case [ c _ index ] return result #解密部分defget_inverse(a,b ) : () (型b的逆元) ) a )求出的26 ) [0]result=''forIinrange(len ) ciphertext ) ) :index=uppercase.find ) ciphertext ) I ) p _ index=k3 rrrex 取得密文的字母频率表,按照字母出现频率从高到低的顺序排列,值针对与字符对应的索引" " #,计算字符频率词典count={ } foriinrange (len (cipher text ) ) : count [ )并将in count else 1 #词典转换为列表并排序后,最终返回值items=count.items (items _ list=[ item [1], item[0]foriteminitems )将得到items reverse=true (axdxm _ list=[ item [1] foriteminitems _ list1] 这是返回列表(映射(lambdax 3360 upper case.index (x ) )。d键k1defget_k1(a,b, 已获得c,d 65: I=0while true : k1=(float (a-d-26 * I )/float(B-c ) ) if k1-26 ork 126: returnoneifisinstanstation list2) :list3=list(map(lambdax,y: [x,y],list1,list2) ) result=[]forIinrange(len ) list2) len(list3) ) :result.append ) list3[ I ] list3[ j ] returnresultdefcrack ] ) : list1=['u ',' v, ' w' 'z']list22=list(list2) result=[ ] count=0while count 63360 foriteminget _ ABCD (list 1, list22 ) 3360k1=get_ ) ) ) ) ) ) 65=1:breakK2=int(d-c*K1 ) 26result.append ) decryption(cs,t ) k3 ) if(count%2==1) : first=list2.pop(0)0) list2.append(first ) list22=list(list2) else 3360 list 22

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。