1.str 和 hex 互转:
转为 hex
message = 'nice shooting'
test = ''.join([ hex(ord(num)).replace('0x','') for num in message ]
转为txt
message = hex
test =''.join([chr(int(message[num:num+2],base=16)) for num in range(0,len(message),2)])
2.利用规则替换字符串
message = 'a1aa2aaa3aaaa4a5a6aa7aaa891asdxzczxzzzzzzz'
trantab = str.maketrans('a123456',' ' *7 ) #这里的替换长度需要一致
message = message.translate(trantab)
3. 栅栏密码:
message = 'abc123456'
li_test = []
lenth = len(message)
# 计算 栅栏
for i in range(2, lenth):
if lenth % i == 0:
li_test.append(i)
print('和'.join([str(i) for i in li_test]), '这几种栅栏方式。。。。')
# 尝试 所有的 栅栏方式
for m in li_test:
li_flag = []
# 挖坑
number = num = lenth // m
for _ in range(num):
li_flag.append('')
# 定义起始开关
switch = 0
for __ in range(m):
# 填坑
for x, y in enumerate(message[switch:num]):
li_flag[x] += y
# 叠加
switch += number
num += number
print('[+]%d栏:' % m, ''.join(li_flag))
li_flag.clear()
5.摩斯
dict_str = {
'.-': 'A',
'-...': 'B',
'-.-.': 'C',
'-..': 'D',
'.': 'E',
'..-.': 'F',
'--.': 'G',
'....': 'H',
'..': 'I',
'.---': 'J',
'-.-': 'K',
'.-..': 'L',
'--': 'M',
'-.': 'N',
'---': 'O',
'.--.': 'P',
'--.-': 'Q',
'.-.': 'R',
'...': 'S',
'-': 'T',
'..-': 'U',
'...-': 'V',
'.--': 'W',
'-..-': 'X',
'-.--': 'Y',
'--..': 'Z',
'-----': '0',
'.----': '1',
'..---': '2',
'...--': '3',
'....-': '4',
'.....': '5',
'-....': '6',
'--...': '7',
'---..': '8',
'----.': '9',
'.-.-.-': '.',
'..--..': '?',
'-.-.--': '!',
'-.--.': '(',
'.--.-.': '@',
'---...': ':',
'-...-': '=',
'-....-': '-',
'-.--.-': ')',
'.-.-.': '+',
'--..--': ',',
'.----.': "'",
'..--.-': '_',
'...-..-': '$',
'-.-.-.': ';',
'-..-.': '/',
'.-..-.': '"',
}
#处理字符串,视情况而定,这里传入
message_mo_si = '.-- --- -'.split()
message = ''
for j in message_mo_si:
try:
message += dict_str[j]
except Exception:
message += ''
print('[+]摩斯电码:',message)
#6.曼切斯特 转 二进制:
这里 我直接 从自己 写的类中 抠出来的
def Manchester(self,status=None):
'''
:param status: 默认 曼切斯特,1 为 差分曼切斯特
:return:
'''
message=''
for num in [self.str1[bi:bi + 2] for bi in range(0, len(self.str1), 2)]:
if status:
message += '1' if num == '10' else '0'
else:
message += '1' if num == '01' else '0'
print('[+]Manchester:',message)
return message
7. 26字母的凯撒
def main(message):
str1 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
str2 = 'abcdefghijklmnopqrstuvwxyz'
for num in range(1,27):
data = ''
for part_data in message:
#判断是否在 data中
if part_data in str1+str2:
if part_data.isupper():
index = str1.index(part_data)
data += str1[(index+num) % 26]
else:
index = str2.index(part_data)
data += str2[(index + num) % 26]
else:
data += part_data
print('凯撒密钥{}[+]:'.format(num),data)
if __name__ == '__main__':
message = 'abcdefG.'
main(message)
8.特殊的移位型凯撒
9.培根密码:
data1 = 'DCCDCCCDDDCDCCCDDCCCCCCCCCDDCDCCCCDCCCCCCDCCCDCCDCCCCDCCDDDCCDDDCCDCDD'
data2 = data1.replace('D', 'b').replace('C', 'a')
table = {'aaaaa': 'a', 'aaaab': 'b', 'aaaba': 'c', 'aaabb': 'd', 'aabaa': 'e', 'aabab': 'f', 'aabba': 'g', 'aabbb': 'h', 'abaaa': 'i', 'abaab': 'j', 'ababa': 'k', 'ababb': 'l', 'abbaa': 'm', 'abbab': 'n', 'abbba': 'o', 'abbbb': 'p', 'baaaa': 'q', 'baaab': 'r', 'baaba': 's', 'baabb': 't', 'babaa': 'u', 'babab': 'v', 'babba': 'w', 'babbb': 'x', 'bbaaa': 'y', 'bbaab': 'z'}
def peigen(data, flag=None, part=None):
'''
:param data: message
:param flag: 默认 密文为 a,b
:param part: 密文 是别的 两个字母 [C,D] C 会变成 a D 会变成b 输出两种
:return:
'''
message = ''
if not flag:
li = [data[tmp:tmp + 5] for tmp in range(0, len(data), 5)]
for cipher in li:
try:
message += table[cipher]
except Exception:
pass
else:
data3 = data.replace('C', 'a').replace('D', 'b')
peigen(data3)
data4 = data.replace('C', 'b').replace('D', 'a')
peigen(data4)
return None
print('密文:', message)
if __name__ == '__main__':
peigen(data1, 1, ['D', 'C'])