#region 文件加密
///文件加密
///
/// 加密
///
/// 要加密的 byte[] 数组
///
///
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;
}
///
/// 将数据调成16倍数--------如果不是16标准倍数解密出错。java会爆出Input length must be multiple of 16 when decrypting with padded cipher
///
///
///
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);
}
}
///
/// 解密
///
/// 要解密的 byte[] 数组
///
///
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