[英]AES encryption for .NET, Java (android) and iOS
使用此帖子中的示例在Android和C#之間兼容加密 ,我已成功在.NET應用程序之間實現AES加密,該應用程序為我的Android應用程序提供XML提要。
現在,我正在嘗試對該應用程序的iOS版本使用相同的實現。 我已經找到了一些非常好的AES for iOS的例子,但到目前為止,似乎沒有一個與我目前正在使用的方案相匹配。 據我所知,問題是C#和Java(rawSecretKey)之間共享的16字節密鑰。 在iOS示例中,我無法找到使用相同字節數組設置的類似密鑰。 它有passPhrase,但不是字節數組。
如果有人知道一個很好的例子來說明這種類型的實現,那將非常有幫助。 我找到的一個iOS示例是http://dotmac.rationalmind.net/2009/02/aes-interoperability-between-net-and-iphone/ ,但同樣,我沒有看到如何將16字節數組包含為在我的帖子頂部的第一個鏈接中引用。
.Net和IOS都支持PKCS7Padding,但Java不支持(除非使用某些第三方庫)
.Net和Java都支持ISO10126Padding,但IOS沒有(除非使用一些第三個patry庫)
所以我認為你需要為IOS和Java提供單獨的.net加密代碼。
以下是一些代碼示例:
對於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;
}
for .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);
}
我只提供加密代碼,因為解密代碼非常相似,你可以輕松搞清楚。
還有其他問題請留言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.