.Net и IOS поддерживают PKCS7Padding, но Java не поддерживает (если не использует стороннюю библиотеку)
.Net и Java поддерживают ISO10126Padding, но IOS не поддерживает (если не использует какую-либо библиотеку третьего патри)
Так что я думаю, что вам нужен отдельный код шифрования .net для IOS и Java.
Вот несколько примеров кода:
для IOS:
+ (NSData*)encryptData:(NSData*)data :(NSData*)key :(NSData*)iv
{
size_t bufferSize = [data length]*2;
void *buffer = malloc(bufferSize);
size_t encryptedSize = 0;
CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt, kCCAlgorithmAES128, kCCOptionPKCS7Padding,
[key bytes], [key length], [iv bytes], [data bytes], [data length],
buffer, bufferSize, &encryptedSize);
if (cryptStatus == kCCSuccess)
return [NSData dataWithBytesNoCopy:buffer length:encryptedSize];
else
free(buffer);
return NULL;
}
для .NET:
public static byte[] AesEncrypt(byte[] bytes, byte[] key, byte[] iv)
{
if (bytes == null || bytes.Length == 0 || key == null || key.Length == 0 || iv == null || iv.Length == 0)
throw new ArgumentNullException();
using (var memoryStream = new MemoryStream())
{
using (var rijndaelManaged = new RijndaelManaged { Key = key, IV = iv, Padding = PaddingMode.PKCS7, Mode = CipherMode.CBC })
{
using (var cryptoStream = new CryptoStream(memoryStream, rijndaelManaged.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
cryptoStream.Write(bytes, 0, bytes.Length);
}
}
return memoryStream.ToArray();
}
}
для Java:
public static byte[] encrypt(byte[] bytes, byte[] key, byte[] iv)
throws Exception
{
Cipher cipher = Cipher.getInstance("AES/CBC/ISO10126Padding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"),
new IvParameterSpec(iv));
return cipher.doFinal(bytes);
}
Я предоставляю код для шифрования только потому, что код дешифрования очень похож, и вы можете легко его выяснить.
Если у вас есть еще вопросы, пожалуйста, оставляйте комментарии.