#region 文件加密
///文件加密
/// <summary>
/// 加密
/// </summary>
/// <param name="array">要加密的 byte[] 数组</param>
/// <param name="key"></param>
/// <returns></returns>
public static byte[] FileEncrypt(byte[] array, string key)
{
//key = FmtPassword(key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
int lengthkey = keyArray.Length;
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
//rDel.IV = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(array, 0, array.Length);
PadToMultipleOf(ref resultArray, 16);//调成16倍数
return resultArray;
}
/// <summary>
/// 将数据调成16倍数--------如果不是16标准倍数解密出错。java会爆出Input length must be multiple of 16 when decrypting with padded cipher
/// </summary>
/// <param name="src"></param>
/// <param name="pad"></param>
private static void PadToMultipleOf(ref byte[] src, int pad)
{
if (src.Length% pad != 0)//如果当前不是16的倍数,增加到指定16倍数
{
int len = (src.Length/pad+1) * pad;
Array.Resize(ref src, len);
}
}
/// <summary>
/// 解密
/// </summary>
/// <param name="array">要解密的 byte[] 数组</param>
/// <param name="key"></param>
/// <returns></returns>
public static byte[] FileDecrypt(byte[] array, string key)
{
//key = FmtPassword(key);
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(array, 0, array.Length);
return resultArray;
}
#endregion
针对JAVA文件使用AES加密的 使用AES/ECB/PKCS5PaddingC# 处理方式
最新推荐文章于 2024-06-14 10:54:20 发布