我试图用 JAVA 解密一个用 C# 加密的字符串。 在 c# 中,使用此方法解密成功:
AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider();
aesProvider.BlockSize = 128;
aesProvider.KeySize = 128;
aesProvider.Key = strKey;
aesProvider.IV = strIV;
aesProvider.Padding = PaddingMode.PKCS7;
aesProvider.Mode = CipherMode.CBC;
ICryptoTransform cryptoTransform = aesProvider.CreateDecryptor(aesProvider.Key, aesProvider.IV);
byte[] DecryptedBytes = cryptoTransform.TransformFinalBlock(EncryptedBytes, 0, EncryptedBytes.Length);
return System.Text.Encoding.UTF8.GetString(DecryptedBytes);
我想做的是将此方法转换为 JAVA (Android),这是我尝试过的方法,但收到一条错误消息(“Pad block corrupted”):
try
{
byte[] IV = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 };
byte[] KEY = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6 };
SecretKeySpec key = new SecretKeySpec(KEY, "AES/CBC/PKCS7Padding");
Cipher cipher = Cipher.getInstance ("AES/CBC/PKCS7Padding");
cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(IV));
byte[] bytesData = Utilities.Base64Coder.decode(data);
Log.i("bytesData", String.valueOf(bytesData.length));
String strResult = new String(cipher.doFinal(bytesData));
Log.i("decrypted string", strResult);
return strResult;
}
catch (Exception e) {
Log.i("decrypted FAILED", e.getMessage());
return null;
}
10 倍 :)
最佳答案
谁曾搜索过这个问题 - 这段代码工作正常,问题在于 c# 和 Java 之间的 key 不同。
GregS - 10 倍提高我的注意力以再次检查它。
关于c# - 将c#解密方法转换为android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8127053/