-
Notifications
You must be signed in to change notification settings - Fork 0
/
TradtionalPassword.py
113 lines (97 loc) · 3.15 KB
/
TradtionalPassword.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
keyboard_map_table = {'Q': 'A', 'W': 'B', 'E': 'C', 'R': 'D', 'T': 'E', 'Y': 'F', 'U': 'G', 'I': 'H', 'O': 'I',
'P': 'J', 'A': 'K', 'S': 'L', 'D': 'M', 'F': 'N', 'G': 'O', 'H': 'P', 'J': 'Q', 'K': 'R',
'L': 'S', 'Z': 'T', 'X': 'U', 'C': 'V', 'V': 'W', 'B': 'X', 'N': 'Y', 'M': 'Z'}
non_alph_num = ['{', '}', '(', ')', '!', '?', ',', '.', ' ', '<', '>', '/', '\\', '"', "'", '@', '#', '$', '%', '^',
'&', '*', '[', ']', '|', ':', ';', '-', '_', '+', '=']
upper = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
lower = 'abcdefghijklmnopqrstuvwxyz'
digits = '0123456789'
def rot_n(text, n, skip_num=True):
"""
The rot-n encode and decode.
:param text: The text you want to encode or decode.
:param n: The number that you want to change round.
:return: The encoded or decoded string.
"""
ret_val = ''
for c in text:
if c in non_alph_num:
ret_val += c
continue
elif c in upper:
temp = ord(c) + n
if temp > ord('Z'):
temp -= ord('Z')
temp += ord('A') - 1
ret_val += chr(temp)
elif c in lower:
temp = ord(c) + n
if temp > ord('z'):
temp -= ord('z')
temp += ord('a') - 1
ret_val += chr(temp)
elif c in digits:
if skip_num:
ret_val += c
continue
else:
temp = ord(c) + n
while temp > ord('9'):
temp -= ord('9')
temp += ord('0') - 1
ret_val += chr(temp)
return ret_val
def barrier_encode(text, n):
"""
The barrier encoding of original text.
:param text: The text you want to encode
:param n: A group with n letters
:return: The encoded string.
"""
arr = []
ret_val = ''
while text != '':
arr.append([c for c in text[0:n]])
text = text[n:]
for j in range(len(arr[0])):
for i in range(len(arr)):
ret_val += arr[i][j]
return ret_val
def barrier_decode(text, n):
"""
The barrier decode of the encrypted code.
:param text: The encrypted text.
:param n: The n group of text dividing.
:return: The original text.
"""
length = len(text)
each_group_num = length // n
arr = []
ret_val = ''
while text != '':
arr.append([c for c in text[0:each_group_num]])
text = text[each_group_num:]
for j in range(len(arr[0])):
for i in range(len(arr)):
ret_val += arr[i][j]
return ret_val
def get_factors(num):
ret_val = []
for i in range(2, num):
if num % i == 0:
ret_val.append(i)
return ret_val
def keyboard_code(text):
"""
A map of QWERTY keyboard to Alphabet
:param text: The original text.
:return: The decoded text.
"""
ret_val = ''
for c in text:
ret_val += keyboard_map_table[c]
return ret_val
def test():
# Your test code here
if __name__ == '__main__':
test()