網站首頁 編程語言 正文
1.柵欄密碼介紹
所謂柵欄密碼,就是把要加密的明文分成N個一組,然后把每組的第1個字連起來,形成一段無規律的話。不過柵欄密碼本身有一個潛規則,就是組成柵欄的字母一般不會太多。 —百度百科
例如: 將明文字符串"hello world"分為2組,即柵欄(密鑰)為2。
去掉空格:helloworld
2個1組:
?helloworld
取第一個字母組合:hlool
取第二個字母組合:elwrd
最后得到柵欄加密為:hloolelwrd?
注意:當len(strings)%n != 0時,缺少的位數使用@填充。len(strins)代表明文字符串長度,n代表柵欄數(密鑰)。
2.柵欄密碼加密
fence_Passwd_encode.py:
#!/usr/bin/python
# Env: python3
# Author: afei_0and1
# -*- coding: utf8 -*-
def fence_Passwd_encode():string = input('請輸入需要加密的明文:')num = int(input('請輸入柵欄數(密鑰):'))res = ''for i in range(int(num)):#遍歷循環輸出結果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]#柵欄密碼解密,循環遍歷有多少欄res = [step for step in range(2, len(secret)) if len(secret)%step == 0]for step in res:flag = ''#獲取解密結果,以step欄進行遍歷獲取解密后的flagfor i in range(step):flag += secret[i::step]print('第%s欄: 解密結果:%s' %(str(step), flag))
if(__name__ == '__main__'):fence_Passwd_burst()
4.W型柵欄密碼加密
W型柵欄密碼是柵欄密碼的變種,將明文按W型排列,然后將每一行的字母依次連起來組成密文,行數就是柵欄數,即密鑰。解密則同樣根據這個“W”圖案,將每一列的字母依次連接起來組成明文。W型柵欄密碼的密鑰不只是密文長度的因數,任何小于密文長度大于1的整數都有可能。
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))]#行數,初始定義為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)#存放加密結果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()
原文鏈接:https://blog.csdn.net/text2201/article/details/128669928
相關推薦
- 2023-01-02 Python創建相同值數組/列表的兩種方法_python
- 2022-06-25 python格式化輸出實例(居中、靠右及靠左對齊)_python
- 2022-05-12 Kotlin generateSequence 迭代器 從1開始產生1000個素數 take 得介紹
- 2022-10-17 React?中的?useContext使用方法_React
- 2022-06-14 全面了解C語言?static?關鍵字_C 語言
- 2022-07-29 pytest解讀一次請求多個fixtures及多次請求_python
- 2023-01-05 C++的new和delete使用示例詳解_C 語言
- 2022-08-07 API處理Android安全距離詳情_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支