我要实现的是波兰语字符的加密和解密。我所知道的是通常“ 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[
答案 0 :(得分:1)
如果您只是在寻找一种简单的方法,请将您的字符串编码为字节,并在遍历字符串和键时使用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'
ąężłóćńś
答案 1 :(得分:-1)
您可以改用内置的str.encode
和bytes.decode
方法:
s = 'MarcelProjectNoName'
e = s.encode('utf-8')
d = e.decode('utf-8')