-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathgenflag.py
executable file
·60 lines (55 loc) · 1.16 KB
/
genflag.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
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import argparse
import random
import math
char_map = [
['A', 'a', '4', '@'],
['B', 'b', '8'],
['C', 'c'],
['D', 'd'],
['E', 'e', '3'],
['F', 'f'],
['G', 'g', '6', '9'],
['H', 'h'],
['I', 'i', '1'],
['J', 'j'],
['K', 'k'],
['L', 'l', '1'],
['M', 'm'],
['N', 'n'],
['O', 'o', '0'],
['P', 'p'],
['Q', 'q'],
['R', 'r'],
['S', 's', '5', '$'],
['T', 't', '7'],
['U', 'u'],
['V', 'v'],
['W', 'w'],
['X', 'x'],
['Y', 'y'],
['Z', 'z', '2'],
]
def change(c):
if c.isalpha():
c = c.upper()
char_set = char_map[ord(c) - ord('A')]
new_c = char_set[random.randint(0, len(char_set) - 1)]
return new_c, (c == new_c) * math.log2(len(char_set))
else:
return c, 0
def main():
global args
parser = argparse.ArgumentParser()
parser.add_argument("string", help = "origin flag string")
args = parser.parse_args()
entropy = 0
for c in args.string:
new_c, e = change(c)
print(new_c, end = '')
entropy += e
print()
print(f"Added entropy: {entropy:.2f} bits")
if __name__ == "__main__":
main()