Я использую алгоритм AES для шифрования данных в приложениях для iPhone и Android перед отправкой на сервер .NET.Шифрование AES расходится после 16 символов
iPhone шифрование работает отлично (код сервера .NET расшифровывает его без проблем).
Андроидальное шифрование отлично работает для текстовых строк < 16 символов. Для четких текстовых строк> = 16 символов первый зашифрованный «кусок» такой же, как у iPhone, второй зашифрованный фрагмент совершенно другой. Длина ключа - 16 символов.
Вот Android код (который отлично работает до 16 символов):
byte[] valueData = value.getBytes();
byte[] keyData = skey.getBytes();
SecretKeySpec skeySpec = new SecretKeySpec(keyData, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7PADDING");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] valueEncryptedData = cipher.doFinal(valueData);
String valueEncryptedString = Base64.encodeToString(valueEncryptedData, Base64.DEFAULT);
return valueEncryptedString;
А вот мой IOS код, который работает отлично:
StringEncryption *crypto = [[StringEncryption alloc] init];
CCOptions padding = kCCOptionPKCS7Padding;
NSData *valueData = [value dataUsingEncoding:NSUTF8StringEncoding];
NSData *keyData = [skey dataUsingEncoding:NSUTF8StringEncoding];
NSData *valueEncryptedData = [crypto encrypt:valueData key:keyData padding:&padding];
NSString *valueEncryptedString = [valueEncryptedData base64EncodingWithLineLength:0];
Я подозреваю, что проблема в том, что-то тривиальный. Например. возможно, я использую неправильную инициализацию Cipher, и я должен использовать CBC вместо ECB. Однако вывод с использованием Cipher.getInstance("AES/CBC/PKCS7PADDING")
также не дает желаемого результата (на самом деле, хуже, поскольку зашифрованное значение полностью отличается от зашифрованного значения iPhone, а не только расходятся после первых 16 символов).
Вы используете простой вызов 'CCCrypt' в функции шифрования? Вы должны показать, как вы выполняете шифрование в iOS - криптовызоны предпочтительнее – Petesh
Пожалуйста, также покажите свой код дешифрования. –
Привет @Patesh, мы используем код шифрования iOS, написанный Дэвидом Векслером http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/ (см. StringEncryption.m в zip-файле) и http://stackoverflow.com/questions/538435/aes-interoperability-between-net-and-iphone/ – tomblah