tools.utils
Yohn Y.
2025-05-01
4:c4bc2d77d4be
Go to Latest
tools.utils/pw/aw_pw_tool
+ Утилита трансляции паролей
2 # devel.a0fs.ru -- TOOLS:SEC:aw_pw_tool -- v0.r202505.1
3 # devel.a0fs.ru -- TOOLS:SEC:safe_pw -- v0.r202409.2
4 # devel.a0fs.ru -- pwtrns.py -- v0.r202402.8
6 from sys import stdin, stdout, stderr
7 from random import seed as rnd_seed, choice as rnd_choice
8 from argparse import ArgumentParser
9 from string import ascii_letters, digits
10 from typing import List, Iterable, Optional
20 'f': 'а', ',': 'б', 'd': 'в', 'u': 'г', 'l': 'д', 't': 'е', '`': 'ё',
21 ';': 'ж', 'p': 'з', 'b': 'и', 'q': 'й', 'r': 'к', 'k': 'л', 'v': 'м',
22 'y': 'н', 'j': 'о', 'g': 'п', 'h': 'р', 'c': 'с', 'n': 'т', 'e': 'у',
23 'a': 'ф', '[': 'х', 'w': 'ц', 'x': 'ч', 'i': 'ш', 'o': 'щ', 'm': 'ь',
24 's': 'ы', ']': 'ъ', "'": 'э', '.': 'ю', 'z': 'я', 'F': 'А', '<': 'Б',
25 'D': 'В', 'U': 'Г', 'L': 'Д', 'T': 'Е', '~': 'Ё', ':': 'Ж', 'P': 'З',
26 'B': 'И', 'Q': 'Й', 'R': 'К', 'K': 'Л', 'V': 'М', 'Y': 'Н', 'J': 'О',
27 'G': 'П', 'H': 'Р', 'C': 'С', 'N': 'Т', 'E': 'У', 'A': 'Ф', '{': 'Х',
28 'W': 'Ц', 'X': 'Ч', 'I': 'Ш', 'O': 'Щ', 'M': 'Ь', 'S': 'Ы', '}': 'Ъ',
29 '"': 'Э', '>': 'Ю', 'Z': 'Я',
32 GOODPWCH=ascii_letters + digits + ' '
37 for l in msg.splitlines():
38 stderr.write(f'ERR: {l}\n')
42 stdout.write(f'{s}\n')
50 def ptr_reverse(d: dict) -> dict:
51 return dict([(v, k) for k, v in d.items()])
54 def get_args(words: Optional[List[str]]) -> Iterable[str]:
55 if words and isinstance(words, (tuple, list)):
63 def out_res(flag: bool, word: str, tr_word: str):
65 out(f'"{word}" -> "{tr_word}"')
74 description='Инструмент для работы с паролями, их преобразованием и трансляцией'
77 ap.add_argument('-u', '--url', action='store_true', default=False,
78 help='Режим фильтрации пароля от опасных для url символов'
81 ap.add_argument('-S', '--show-passwd', action='store_true', default=False,
82 help='Показывать пароли до преобразования'
85 ap.add_argument('-t', '--pwtrans', action='store_true', default=False,
86 help='Режим трансляции паролей из английской в русскую раскладку')
88 ap.add_argument('-r', '--reverse', action='store_true', default=False,
89 help='Для трансляции паролей: переводим из русской в английскую раскладку')
92 ap.add_argument('word', nargs='*', help='Слово для перевода')
97 args = ap.parse_args()
101 d = ptr_reverse(TRDICT)
106 for w in get_args(args.word):
110 ''.join(map(lambda x: d[x] if x in d else x, w))
114 # Init random generator
118 cur_safe_ch = SAFECH['url']
121 cur_safe_ch = SAFECH['def']
123 GOODPWCH += cur_safe_ch
125 for w in get_args(args.word):
131 if c not in GOODPWCH:
132 c = rnd_choice(cur_safe_ch)
142 except Exception as e:
143 err(f'{type(e).__name__}: {e}')
145 except KeyboardInterrupt: