如何在asp.net中实现php里的crypt()函数,asp.netcrypt
原有一套系统是使用php+mysql开发的,现在要新上一个项目在登录部分要用到原项目数据库中的数据,原mysql数据库中密码是用php的crypt()方法将用户密码加密后保存进数据库的。
如123456经php的crypt()加密后得到的结果是:“$1$ft3$VClxHjpQFd4ZwMC5.qRii/”,在CSDN上找到有相关的代码,但调试后有异常,异常位置在setEcn.Key = inputByteArray2;处异常提示“指定键的大小对于此算法无效”。
恳请各位老师帮忙解决下这个问题。
CSDN代码:
/// <summary> /// 使用盐值进行三重加密 /// </summary> /// <param name="Value">要加密的字符串</param> /// <param name="sKey">盐值</param> /// <returns></returns> 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 ""; } } /// <summary> /// 获取盐值 /// </summary> /// <returns></returns> public static string GenericSal() { byte[] buf = new byte[16]; (new RNGCryptoServiceProvider()).GetBytes(buf); return Convert.ToBase64String(buf); }
解决方案
可以参考
[DllImport( "php5ts.dll", EntryPoint = "crypt", CharSet = CharSet.Ansi )] private static extern string crypt( string str, string salt );
http://stackoverflow.com/questions/343995/php-crypt-function-in-net
用户评论