那应该是你加密的出错了,你在看看你加密的方法和解密的方法是否一致
/
去掉解密出来字符串后面的一些转义字符
如果你想要测试是不是我们得到的解密字符串真的有一些我们看不到的转义字符,我们可以进行字符串的截取
你还可以用这种方式进行测试,你会发现这个是可以的
/// summary
/// Aes解密
/// /summary
/// param name="source"源字符串/param
/// param name="key"aes密钥,长度必须32位/param
/// returns解密后的字符串/returns
public static string DecryptAes(string source, string key)
{
using (AesCryptoServiceProvider aesProvider = new AesCryptoServiceProvider())
{
aesProvider.Key = GetAesKey(key);
aesProvider.Mode = CipherMode.ECB;
aesProvider.Padding = PaddingMode.PKCS7;
using (ICryptoTransform cryptoTransform = aesProvider.CreateDecryptor())
{
byte[] inputBuffers = Convert.FromBase64String(source);
byte[] results = cryptoTransform.TransformFinalBlock(inputBuffers, 0, inputBuffers.Length);
aesProvider.Clear();
return Encoding.UTF8.GetString(results);
}
}
}
你是对文件内容加的密,应该和文件类型无关把。如果用的是
AES算法加的密的话,初始化的时候就会写到
keygen = KeyGenerator.getInstance("AES");
//生成密钥
deskey = keygen.generateKey();
//生成Cipher对象,指定其支持的DES算法
c = Cipher.getInstance("AES");
加密和解密的过程几乎是一样的,AES是对称加密方式,你看看加密和解密方法里的有没有写错的地方。
你的Cipher生成好像缺了很多步聚,而且如果只需要加/解密,用CipherInputStream和CipherOutputStream应该更方便。
我把你的代码完整改了一下(几乎面目全非)。已包含加密和解密的方法,一套即用。除了Cipher生成那方法比较难明外,其他部份都很简单,相信你一看就明。
你的Cipher生成好像缺了很多步聚,而且如果只需要加/解密,用CipherInputStream和CipherOutputStream应该更方便。
我把你的代码完整改了一下(几乎面目全非)。已包含加密和解密的方法,一套即用。除了Cipher生成那方法比较难明外,其他部份都很简单,相信你一看就明。