staram się komunikować z AutoIt z serwerem Python TCP przy użyciu szyfrowania, ale myślę, że coś jest nie tak z moimi algorytmów od wyników obu encryptions/decryptions są różne:AutoIt do Pythona szyfrowania/deszyfrowania
Auto:
#include <Crypt.au3>
Global $key = "pjqFX32pfaZaOkkCFQuYziOApaBgRE1Y";
Global $str = "Am I welcome???"
_Crypt_Startup()
$hKey = _Crypt_DeriveKey($key, $CALG_AES_256)
$s = _Crypt_EncryptData($str, $hKey, $CALG_USERKEY)
$s = _Base64Encode($s)
ConsoleWrite("Encrypted: " & $s & @CRLF)
$s = _Base64Decode($s)
$str = _Crypt_DecryptData($s, $hKey, $CALG_USERKEY)
ConsoleWrite("Decrypted: " & BinaryToString($str) & @CRLF)
AutoIt wyjściowa:
Encrypted: ZFBnThUDPRuIUAPV6vx9Ng==
Decrypted: Am I welcome???
Python:
#!/usr/bin/env python
from Crypto.Cipher import AES
import base64
import binascii
BLOCK_SIZE = 16
PADDING = binascii.unhexlify(b"07")
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)).rstrip(PADDING)
secret = 'pjqFX32pfaZaOkkCFQuYziOApaBgRE1Y'
cipher=AES.new(key=secret, mode=AES.MODE_ECB)
encoded = EncodeAES(cipher, 'Am I welcome???')
print 'Encrypted string:', encoded
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded
wyjście Python:
Encrypted string: NDJepp4CHh5C/FZb4Vdh4w==
Decrypted string: Am I welcome???
Zaszyfrowane wyniki są nie takie same ...
Gdzie jest mój "błąd"?
Początkowo sądziłem, że jest to problem z kodowaniem ciągów znaków, ale wypróbowałem wszystko, co mogę wymyślić w AutoIt i nie mogę uzyskać tego samego wyniku co Twój kod Pythona. Czy [this] (http://stackoverflow.com/a/12221931/611562) dotyczy Twojego kodu Pythona? – Matt
To naprawdę wydaje się być problemem po stronie Pythona. Uruchomiłem KAT z plików NIST przeciwko części AutoIT i przeszło cały test. PyCrypto nie przekazał go. Tak myślę, że muszę znaleźć inną implementację AES dla Pythona. Zobacz także: http://eli.thegreenplace.net/2010/06/25/aes-encryption-of-files-in-python-with-pycrypto/#comment-979860 –
Wydaje się, że znalazłem "problem" ... AutoIT domyślnie używa 0x00 do wypełniania, a python używa 0x20. Ja sam odpowiem, gdy tylko zaktualizuję kod. Dzięki Matt. –