AES在C#和Java中加密文件
我用这种方法在C#中加密了文件:AES在C#和Java中加密文件,java,c#,servlets,encryption,aes,Java,C#,Servlets,Encryption,Aes,我用这种方法在C#中加密了文件: public byte[] Crypt(byte[] filearray, string sKey) { AesManaged DES = new AesManaged(); DES.Key = Encoding.UTF8.GetBytes(sKey); DES.Mode = CipherMode.ECB; DES.Pa
public byte[] Crypt(byte[] filearray, string sKey)
{
AesManaged DES = new AesManaged();
DES.Key = Encoding.UTF8.GetBytes(sKey);
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.PKCS7;
ICryptoTransform crypt = DES.CreateEncryptor();
byte[] cipher = crypt.TransformFinalBlock(niz, 0, filearray.Length);
String encryptedText = Convert.ToBase64String(cipher);
return cipher.ToArray();
}
现在我尝试用Java解密文件:
private static byte[] transform(string base64Key, final byte[] fileBytes) throws InvalidKeyException, InvalidAlgorithmParameterException, NoSuchProviderException
{
final byte[] keyBytes = base64Key.getBytes(StandardCharsets.UTF_8);
final byte[] ivBytes = base64Iv.getBytes(StandardCharsets.UTF_8);
final SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES");
final IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
byte[] transformedBytes = null;
try
{
Security.addProvider(new BouncyCastleProvider());
final Cipher cipher = Cipher.getInstance("AES/ECB/PKCS7Padding");;
cipher.init(Cipher.DECRYPT_MODE, keySpec);
transformedBytes = cipher.doFinal(fileBytes);
}
catch (NoSuchAlgorithmException | NoSuchPaddingException | IllegalBlockSizeException |
BadPaddingException e)
{
e.printStackTrace();
}
return transformedBytes;
}
当我尝试执行这个函数时,我得到一个异常
javax.crypto.BadPaddingException:填充块已损坏
位于org.bouncycastle.jcajce.provider.symmetry.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(未知源)
位于org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(未知源)
位于javax.crypto.Cipher.doFinal(Cipher.java:2165)
尝试使用不同的填充,例如:
Cipher.getInstance("AES/ECB/NoPadding");
或
而不是
Cipher.getInstance("AES/ECB/PKCS7Padding");
答案的一部分是否可以格式化为代码,以使其更具可读性?不添加填充是没有用的,您必须自己填充。填充是可以的。在base64中传输数据怎么样?
Cipher.getInstance("AES/ECB/PKCS7Padding");