Python實(shí)現(xiàn)柵欄密碼的加密解密方法詳解
1.柵欄密碼介紹
所謂柵欄密碼,就是把要加密的明文分成N個(gè)一組,然后把每組的第1個(gè)字連起來,形成一段無規(guī)律的話。不過柵欄密碼本身有一個(gè)潛規(guī)則,就是組成柵欄的字母一般不會(huì)太多。 —百度百科
例如: 將明文字符串"hello world"分為2組,即柵欄(密鑰)為2。
去掉空格:helloworld
2個(gè)1組:
helloworld
取第一個(gè)字母組合:hlool
取第二個(gè)字母組合:elwrd
最后得到柵欄加密為:hloolelwrd
注意:當(dāng)len(strings)%n != 0時(shí),缺少的位數(shù)使用@填充。len(strins)代表明文字符串長度,n代表柵欄數(shù)(密鑰)。
2.柵欄密碼加密
fence_Passwd_encode.py:
#!/usr/bin/python # Env: python3 # Author: afei_0and1 # -*- coding: utf8 -*- def fence_Passwd_encode():string = input('請(qǐng)輸入需要加密的明文:')num = int(input('請(qǐng)輸入柵欄數(shù)(密鑰):'))res = ''for i in range(int(num)):#遍歷循環(huán)輸出結(jié)果for j in range(int(string.__len__()/num + 0.5)):#print(j)try:res += string[j*num+i]except:passprint(res)if(__name__ == '__main__'):fence_Passwd_encode()
3.柵欄密碼解密(爆破)
fence_Passwd_burst.py:
#!/usr/bin/python # Env: python3 # -*- coding: utf8 -*- import sys def fence_Passwd_burst():if (len(sys.argv) < 2):print("-----------------------------------------------")print(" ")print("Useg: python %s <fence_encryp_string>" % sys.argv[0])print("eg: python fence_Passwd_burst.py 'hloolelwrd'")print(" ")print("-----------------------------------------------")returnsecret = sys.argv[1]#柵欄密碼解密,循環(huán)遍歷有多少欄res = [step for step in range(2, len(secret)) if len(secret)%step == 0]for step in res:flag = ''#獲取解密結(jié)果,以step欄進(jìn)行遍歷獲取解密后的flagfor i in range(step):flag += secret[i::step]print('第%s欄: 解密結(jié)果:%s' %(str(step), flag)) if(__name__ == '__main__'):fence_Passwd_burst()
4.W型柵欄密碼加密
W型柵欄密碼是柵欄密碼的變種,將明文按W型排列,然后將每一行的字母依次連起來組成密文,行數(shù)就是柵欄數(shù),即密鑰。解密則同樣根據(jù)這個(gè)“W”圖案,將每一列的字母依次連接起來組成明文。W型柵欄密碼的密鑰不只是密文長度的因數(shù),任何小于密文長度大于1的整數(shù)都有可能。
fence_W-Type-encode.py:
#!/usr/bin/python # Env: python3 # -*- coding: utf8 -*- import sys def generaget_W():if (len(sys.argv) < 3):print("-----------------------------------------------")print(" ")print("Useg: python %s <string> <col_num>" % sys.argv[0])print("eg: python fence_W-Type_encode.py helloworld 3")print(" ")print("-----------------------------------------------")returnstring = sys.argv[1]num = sys.argv[2]arr = [['*']*len(string) for i in range(int(num))]#行數(shù),初始定義為0row = 0upflag = False#在矩陣上按“W”畫出stringfor column in range(len(string)):arr[row][column] = string[column]if row == int(num)-1:upflag = Trueif row == 0:upflag = Falseif upflag:#上邊界row -= 1else:#下邊界row += 1#打印W圖案for i in arr:print(i)#存放加密結(jié)果res = []for row in range(int(num)):for column in range(len(string)):if arr[row][column] != '*':res.append(arr[row][column])print(''.join(res))if(__name__ == '__main__'):generaget_W()
到此這篇關(guān)于Python實(shí)現(xiàn)柵欄密碼的加密解密方法詳解的文章就介紹到這了,更多相關(guān)Python柵欄密碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03Python使用matplotlib的pie函數(shù)繪制餅狀圖功能示例
這篇文章主要介紹了Python使用matplotlib的pie函數(shù)繪制餅狀圖功能,結(jié)合實(shí)例形式分析了Python使用matplotlib的pie函數(shù)進(jìn)行餅狀圖繪制的具體操作技巧,注釋中對(duì)pie函數(shù)的用法進(jìn)行了詳細(xì)的說明,便于理解,需要的朋友可以參考下2018-01-01python如何使用python-docx調(diào)整Word文檔樣式
本文介紹了如何修改文字字體樣式、對(duì)齊樣式、行間距以及段前段后間距,并通過效果展示給出參考,適用于需要進(jìn)行文檔編輯的讀者2024-09-09Python中Pandas庫的數(shù)據(jù)處理與分析
Python的Pandas庫是數(shù)據(jù)科學(xué)領(lǐng)域中非常重要的一個(gè)庫,它使數(shù)據(jù)清洗和分析工作變得更快更簡單,Pandas結(jié)合了NumPy的高性能數(shù)組計(jì)算功能以及電子表格和關(guān)系型數(shù)據(jù)庫(如SQL)的靈活數(shù)據(jù)處理能力,需要的朋友可以參考下2023-07-07Python 實(shí)現(xiàn)一行輸入多個(gè)值的方法
下面小編就為大家分享一篇Python 實(shí)現(xiàn)一行輸入多個(gè)值的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Python?ConfigParser庫輕松讀寫INI文件實(shí)例探究
這篇文章主要為大家介紹了Python?ConfigParser庫輕松讀寫INI文件實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01