Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 30, 2016 15:08:56

Nikita32
Зарегистрирован: 2016-06-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

AES шифрование

Добрый день, пытаюсь зашифровать строку 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'))
Строка шифруется и расшифровывается, но ни на одном онлайн-aes дешифраторе расшифровать с таким же ключом не получилось. В чем может быть проблема?
Ссылки на онлайн дешифраторы:
http://crypt-online.narod.ru/crypts/aes/
http://aes.online-domain-tools.com/

Офлайн

#2 Июнь 30, 2016 15:41:08

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

AES шифрование

BS поставьте такой как на сайте - 128 например



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июнь 30, 2016 16:22:42

Nikita32
Зарегистрирован: 2016-06-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

AES шифрование

ZerG
BS поставьте такой как на сайте - 128 например
Попробовал, тоже не декодируется потом. BS - это размер в байтах 16 * 8 = 128 бит, и еще: ключ сколько символов должен быть?

Офлайн

#4 Июнь 30, 2016 16:48:48

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

AES шифрование

а как с помощью этого сайта вы пытаетесь что-то сделать если он даже cbc не поддерживает??!
http://crypt-online.narod.ru/crypts/aes/



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Июнь 30, 2016 17:48:40

Nikita32
Зарегистрирован: 2016-06-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

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)
Проверял потом через: http://aes.online-domain-tools.com/ - не работает

Отредактировано Nikita32 (Июнь 30, 2016 17:49:57)

Офлайн

#6 Июнь 30, 2016 17:55:58

Nikita32
Зарегистрирован: 2016-06-30
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

AES шифрование

http://aesencryption.net/ - работает

Офлайн

#7 Июль 1, 2016 00:23:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9992
Репутация: +  857  -
Профиль   Отправить e-mail  

AES шифрование

Nikita32
ключ сколько символов должен быть?
Ключ занимает столько же, сколько один блок. Если ключ короче или длиннее, то обычно его транслируют как-то до такой длины (могут и хеш от него взять). То есть бывает так, что алгоритм один, а ключ участвует не напрямую, а сначала транслируется во что-то. Поэтому разные сервисы один шифротекст в одном алгоритме не могут расшифровать, так как по разному делают ключ.



Отредактировано py.user.next (Июль 1, 2016 00:24:57)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version