原有一套系统是使用php+mysql开发的,现在要新上一个项目在登录部分要用到原项目数据库中的数据,原mysql数据库中密码是用php的crypt()方法将用户密码加密后保存进数据库的。
如123456经php的crypt()加密后得到的结果是:“$1$ft3$VClxHjpQFd4ZwMC5.qRii/”,在CSDN上找到有相关的代码,但调试后有异常,异常位置在setEcn.Key
= inputByteArray2;处异常提示“指定键的大小对于此算法无效”。
恳请各位老师帮忙解决下这个问题。
CSDN代码:
///
/// 使用盐值进行三重加密
///
/// 要加密的字符串
/// 盐值
///
public static string EncryptString(string Value, string sKey)
{
try
{
ICryptoTransform ct;
MemoryStream ms;
CryptoStream cs;
byte[] byt;
SymmetricAlgorithm setEcn = new TripleDESCryptoServiceProvider();
byte[] inputByteArray = new byte[8];
Encoding.UTF8.GetBytes(sKey, 0, 8, inputByteArray, 0);
byte[] inputByteArray2 = Encoding.UTF8.GetBytes(sKey);
setEcn.IV = inputByteArray;
setEcn.Key = inputByteArray2;
ct = setEcn.CreateEncryptor(setEcn.Key, setEcn.IV);
byt = Encoding.UTF8.GetBytes(Value);
ms = new MemoryStream();
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
cs.Write(byt, 0, byt.Length);
cs.FlushFinalBlock();
cs.Close();
return Convert.ToBase64String(ms.ToArray());
}
catch (Exception e)
{
return "";
}
}
///
/// 获取盐值
///
///
public static string GenericSal()
{
byte[] buf = new byte[16];
(new RNGCryptoServiceProvider()).GetBytes(buf);
return Convert.ToBase64String(buf);
}