Простой способ зашифровать строки с польскими символами - PullRequest
0 голосов
/ 06 февраля 2019

Чего я хочу добиться, так это чтобы польские символы шифровали и дешифровали.Что я знаю, так это то, что обычно работает «UTF-8» или «windows-1250», но вопрос заключается в том, где его поставить.

Вот рабочий пример из близкого вопроса, но безконкретные символы:

def encode(key, string):
    encoded_chars = []
    for i in range(len(string)):
        key_c = key[i % len(key)]
        encoded_c = chr(ord(string[i]) + ord(key_c) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return encoded_string

def decode(key, string):
    encoded_chars = []
    for i in range(len(string)):
        key_c = key[i % len(key)]
        encoded_c = chr((ord(string[i]) - ord(key_c) + 256) % 256)
        encoded_chars.append(encoded_c)
    encoded_string = ''.join(encoded_chars)
    return encoded_string

e = encode('MarcelProjectNoName', 'ąężłóćńś')
d = decode('MarcelProjectNoName', e)
print(e)
print(d)

Этот код возвращает:

ŒźǮƥŘųƔǍ
|BóD[

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Если вы просто ищете простой метод, закодируйте свои строки в байты и используйте XOR при переборе строки и ключа.Преимущество - та же функция может быть использована для шифрования / дешифрования.Обратите внимание, что .encode() по умолчанию utf8:

def encrypt(key, string):
    return bytes([b ^ key[i % len(key)] for i,b in enumerate(string)])

decrypt = encrypt

key = 'MarcelProjectNoName'.encode()
e = encrypt(key, 'ąężłóćńś'.encode())
d = decrypt(key, e)

print(e)
print(d.decode())

Выход:

b'\x89\xe4\xb6\xfa\xa0\xd0\x95\xf0\xac\xd9\xa1\xe4\xb1\xca\xaa\xd5'
ąężłóćńś
0 голосов
/ 06 февраля 2019

Вместо этого вы можете использовать встроенные методы str.encode и bytes.decode:

s = 'MarcelProjectNoName'
e = s.encode('utf-8')
d = e.decode('utf-8')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...