none
如何在asp.net中实现php里的crypt()函数 RRS feed

  • 问题

  • 原有一套系统是使用php+mysql开发的,现在要新上一个项目在登录部分要用到原项目数据库中的数据,原mysql数据库中密码是用phpcrypt()方法将用户密码加密后保存进数据库的。

    123456phpcrypt()加密后得到的结果是:“$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);
            }
    

    2013年1月12日 9:49

答案

  • 可以参考

    [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


    【孟子E章】

    2013年1月14日 4:37
    版主

全部回复