Bir dizeyi IOS'da şifrelemeye çalışıyorum ve sonra bir TCP sunucusuna göndereceğim. Kodun ve iOS sürümlerinin Python sürümü aşağıda gösterilmiştir. Lütfen her iki versiyonun çıktılarına bakın. Oldukça benzer görünüyorlar ama uzunlukları farklı ve sebebini bilmiyorum. Herkes kontrol edebilir mi, sebebi ne olabilir?Python'da AES Şifreleme, farklı bir biçimdir iOS
Lütfen 16 önceden bir metin uzunluğu verdiğim için Python komut dosyasında PADDING öğesinin atılması gerektiğini unutmayın.
PYTHON Kodu:
#!/usr/bin/env python
from Crypto.Cipher import AES
import base64
import os
# the block size for the cipher object; must be 16, 24, or 32 for AES
BLOCK_SIZE = 16
PADDING = '{'
# one-liner to sufficiently pad the text to be encrypted
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
# one-liners to encrypt/encode and decrypt/decode a string
# encrypt with AES, encode with base64
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)
secret = "123456789"
# create a cipher object using the random secret
cipher = AES.new(secret)
encoded = EncodeAES(cipher, 'password12345678')
print 'Encrypted string:', encoded
decoded = DecodeAES(cipher, encoded)
print 'Decrypted string:', decoded
ÇIKIŞ:
Şifreli dizesi: 57AayWF4jKYx7KzGkwudIBZUsn1ULOC0C4c5YF3xeI8 =
Decrypted dize: password12345678
NSString *[email protected]"123456789";
NSString *mystr [email protected]"password12345678";
const char *utfString = [mystr UTF8String];
NSData *aData=[NSData dataWithBytes: utfString length: strlen(utfString)];
aData=[mystr dataUsingEncoding:NSUTF8StringEncoding];
NSData *data;//=[aData AES128EncryptWithKey:forKey];
data=[aData AES128EncryptWithKey:forKey];
NSString *base64 = [data base64EncodedString];
aData=[data AES128DecryptWithKey:forKey];
mystr=[[NSString alloc] initWithData:aData encoding:NSUTF8StringEncoding];
NSLog(@"AES data : %@ \n %@",mystr,base64);
ÇIKIŞ:
AES veriler: password12345678
57AayWF4jKYx7KzGkwudIKNlwA + HErrmiy1Z0szzZds =
Yalnızca dolgu yok sayabilirsiniz [ECB modunu] kullanarak (http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29). Umarım ECB modunu kullanmıyorsundur. – sarnold
Python'da modu ayarlamadım, varsayılan değeri kullandığına inanıyorum. – Bora
@sarnold ECB modu da dolgu gerektirir, IV ECB modunda ayarlanmamalı veya tüm sıfıra ayarlanmamalıdır (platform bir IV gerektiriyorsa), ancak doldurma kesinlikle gereklidir. Ya da Python/iOS platformuna özgü olan nedir? –