今天在测试加密算法的时候,发现不同的key 尽然可以得到相同的加密结果, 不是很理解,在此留下笔记,
Byte[] rgbIV = { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF };
Encoding encoding = Encoding.UTF8;
string encryptKey="znyuVmdvl8Q=";
/// <summary>
/// 加密
/// </summary>
/// <param name="algorithm">加密算法</param>
/// <param name="encryptBytes">要加密的字节序列</param>
/// <returns>返回加密的字节序列</returns>
public byte[] Encrypt(SymmetricAlgorithm algorithm, byte[] encryptBytes)
{
byte[] cipherTextBytes = null;
try
{
using (MemoryStream m_stream = new MemoryStream())
{
//数据流链接加密流
using (CryptoStream m_cstream =
new CryptoStream(m_stream,
// algorithm.CreateEncryptor(Convert.FromBase64String(encryptKey), rgbIV),
algorithm.CreateEncryptor(encoding.GetBytes(encryptKey), rgbIV),
CryptoStreamMode.Write))
{
m_cstream.Write(encryptBytes, 0, encryptBytes.Length);
m_cstream.FlushFinalBlock();
cipherTextBytes = m_stream.ToArray();
}
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
//释放资源
algorithm.Clear();
}
return cipherTextBytes;
}
/// <summary>
/// DES 加密(数据加密标准,速度较快,适用于加密大量数据的场合
/// </summary>
/// <param name="encryptStr">待加密的密文</param>
/// <returns>返回加密的字符串</returns>
public string DESEncrypt(string encryptStr)
{
//检查数据
if (string.IsNullOrEmpty(encryptStr))
{
throw (new Exception("密文不得为空"));
}
//实例化加密算法
DESCryptoServiceProvider m_DESProvider = new DESCryptoServiceProvider();
//将要加密的字符串编码成一个字节序列
byte[] m_btEncryptStr = encoding.GetBytes(encryptStr);
//将加密返回的字节序列转化成字符串
byte[] m_bts = Encrypt(m_DESProvider, m_btEncryptStr);
string m_strEncrypt = Convert.ToBase64String(m_bts);
string mm = encoding.GetString(m_bts);
return m_strEncrypt;
}
调用
DESEncrypt("123456")
当设置 encryptKey的值为sdfsdfef 或 sdfsdfdf时 得到的加密结果一样: zf+DyH2Uiug=