Форум сайта python.su
Добрый день, пытаюсь зашифровать строку 128-битным ключом с помощью AES алгоритма. Нашел этот код:
import base64 from Crypto import Random from Crypto.Cipher import AES BS = 16 pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s : s[0:-s[-1]] class AESCipher: def __init__( self, key ): self.key = key def encrypt( self, raw ): raw = pad(raw) print(AES.block_size) iv = Random.new().read( AES.block_size ) cipher = AES.new( self.key, AES.MODE_CBC, iv ) return base64.b64encode( iv + cipher.encrypt( raw ) ) def decrypt( self, enc ): enc = base64.b64decode(enc) iv = enc[:16] cipher = AES.new(self.key, AES.MODE_CBC, iv ) return unpad(cipher.decrypt( enc[16:] )) cipher = AESCipher('mysecretpassword') encrypted = cipher.encrypt('Secret Message A') decrypted = cipher.decrypt(encrypted) print (encrypted.decode('UTF-8')) print (decrypted.decode('UTF-8'))
Офлайн
BS поставьте такой как на сайте - 128 например
Офлайн
ZerGПопробовал, тоже не декодируется потом. BS - это размер в байтах 16 * 8 = 128 бит, и еще: ключ сколько символов должен быть?
BS поставьте такой как на сайте - 128 например
Офлайн
а как с помощью этого сайта вы пытаетесь что-то сделать если он даже cbc не поддерживает??!
http://crypt-online.narod.ru/crypts/aes/
Офлайн
Да, согласен с помощью первого указанного сайта это невозможно. Вот другой код, испльзую ECB режим, BLOCK_SIZE должен быть равен размеру ключа?
from Crypto.Cipher import AES import base64 import os from base64 import b64encode BLOCK_SIZE = 16 PADDING = '{' pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s))) DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).decode("UTF-8").rstrip(PADDING) secret = b'asasasasasasasas' cipher = AES.new(secret, AES.MODE_ECB) print(secret.decode('utf-8')) encoded = EncodeAES(cipher, 'password') print ('Encrypted string:', encoded.decode('utf-8')) decoded = DecodeAES(cipher, encoded) print ('Decrypted string:', decoded)
Отредактировано Nikita32 (Июнь 30, 2016 17:49:57)
Офлайн
http://aesencryption.net/ - работает
Офлайн
Nikita32Ключ занимает столько же, сколько один блок. Если ключ короче или длиннее, то обычно его транслируют как-то до такой длины (могут и хеш от него взять). То есть бывает так, что алгоритм один, а ключ участвует не напрямую, а сначала транслируется во что-то. Поэтому разные сервисы один шифротекст в одном алгоритме не могут расшифровать, так как по разному делают ключ.
ключ сколько символов должен быть?
Отредактировано py.user.next (Июль 1, 2016 00:24:57)
Офлайн