2013-12-11 13 views
5

şifresini, ama benim algoritmalar ile yanlış bir şey, her iki şifreleme sonuçlarına beri olduğunu düşünüyorum/deşifre farklıdır:AutoIt/I şifreleme kullanılarak bir Python TCP sunucusu ile AutoIt gelen iletişim kurmaya çalışıyorum

AutoIt:

#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 Çıktı:

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 

Python çıkışı:

Encrypted string: NDJepp4CHh5C/FZb4Vdh4w== 
Decrypted string: Am I welcome??? 

şifreli sonuçlar aynı DEĞİLDİR ...

benim "böcek" dir

?

+0

Başlangıçta bunun dizgi kodlamasıyla ilgili bir sorun olduğunu düşündüm, ancak AutoIt'te düşünebildiğim her şeyi denedim ve python kodunuzla aynı sonucu alamıyorum. [Bu] (http://stackoverflow.com/a/12221931/611562) python kodunuzla alakalı mı? – Matt

+0

Python tarafında gerçekten bir sorun gibi görünüyor. KAT'yi NIT dosyalarından AutoIT parçasına karşı çalıştırdım ve tüm testi geçti. PyCrypto geçmedi. Bu yüzden python için başka bir AES uygulaması bulmam gerektiğini düşünüyorum. Ayrıca bkz: http://eli.thegreenplace.net/2010/06/25/aes-encryption-of-files-in-python-with-pycrypto/#comment-979860 –

+0

"Sorun" u bulduğum gibi görünüyor ... AutoIT varsayılan olarak doldurma için 0x00 kullanıyor ve python 0x20 kullanıyor. Kodu güncellediğimde "kendi kendine cevap vereceğim". Sağol Matt. –

cevap

6

sorun padding değişen VE AutoIt farklı AES uygulaması kullanılarak çözülebilir: buradan

rijndael.au3: http://www.autoitscript.com/forum/topic/44581-crypto-suite/

AutoIt:

#include <rijndael.au3> 
#include <String.au3> 

Global $key = "pjqFX32pfaZaOkkC"; 
Global $text = "Am I welcome???" 
$encrypted = _StringToHex(BinaryToString(_rijndaelCipher($key, $text, 128, 0, ''))) 
ConsoleWrite("Encrypted: " & $encrypted & @CRLF) 
$decrypted = BinaryToString(_rijndaelInvCipher($key, _HexToString($encrypted), 128, 0, '')) 
ConsoleWrite("Decrypted: " & $decrypted & @CRLF) 

Çıktı:

Encrypted: A6848F1EF8C7C1313689E18567235A93 
Decrypted: Am I welcome??? 

Python:

#!/usr/bin/env python 

from Crypto.Cipher import AES 
import base64 

BLOCK_SIZE = 16 

PADDING = chr(0) 

pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING 

EncodeAES = lambda c, s: base64.b16encode(c.encrypt(pad(s))) 
DecodeAES = lambda c, e: c.decrypt(base64.b16decode(e)).rstrip(PADDING) 

text = 'Am I welcome???' 
secret = 'pjqFX32pfaZaOkkC' 

cipher=AES.new(key=secret, mode=AES.MODE_ECB) 

encoded = EncodeAES(cipher, text) 
print 'Python Encrypted string: ', encoded 

decoded = DecodeAES(cipher, encoded) 
print 'Python Decrypted string: ', decoded.encode("hex") 
print 'Python Decrypted string: ', decoded 

myencoded = "A6848F1EF8C7C1313689E18567235A93" 
print "AutoIt Result:   ", myencoded 
decoded = DecodeAES(cipher, myencoded) 
print 'From AU Decrypted string:', decoded 
mydecoded = EncodeAES(cipher, decoded) 
print 'Re-Encrypted string:  ', mydecoded.upper() 

Çıktı:

Python Encrypted string: A6848F1EF8C7C1313689E18567235A93 
Python Decrypted string: 416d20492077656c636f6d653f3f3f 
Python Decrypted string: Am I welcome??? 
AutoIt Result:   A6848F1EF8C7C1313689E18567235A93 
From AU Decrypted string: Am I welcome??? 
Re-Encrypted string:  A6848F1EF8C7C1313689E18567235A93 

ham ikili gönderme beri base64 şifreleme/şifre çözme kullanmaya devam etmeyin TCP akışları için gayet iyi.