• 实现通用 Web CAPTCHA 图形验证码 JavaScript 脚本 API 服务 (JavaScript 脚本动态页面引用) 完整代码


    
    //CaptchaPlaceHolder.aspx.cs
    namespace Microshaoft.WebSecurity
    {
        using System;
        using System.Configuration;
        using System.Web;
        using System.Web.UI;
        using System.Text;
        using Microshaoft;
        public class CaptchaPlaceHolder : Page
        {
            public static string _UrlPrefix = ConfigurationManager.AppSettings["UrlPrefix"];
            public int _W = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultWidth"]);
            public int _H = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultHeight"]);
            public int _L = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultTextLength"]);
            public string _RequestRSAPublicKey;
            public string _ImgID = "ID_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _DivID = "ID_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _DivObjVar = "var_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _DivChildrenNodesObjVar = "var_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _DivChildNodeObjVar = "var_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _iVar = "var_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _FunctionName = "function_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _CallbackName;
            public string _RefreshCallName;
            public string _ClientID;
            public string _RSASignMode;
            public string _ScriptObjVar = "var_" + Guid.NewGuid().ToString().Replace("-", "_");
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!_UrlPrefix.EndsWith("/"))
                {
                    _UrlPrefix += "/";
                }
                //AntiXss
                _CallbackName = Request.QueryString["callback"];
                _CallbackName = AntiXss.JavaScriptEncode(_CallbackName, false);
    ///                        if (!RegexValidateHelper.IsValidNameOrID(_CallbackName))
    ///                        {
    ///                            //AntiXss
    ///                            _CallbackName = "";
    ///                        }
                _RefreshCallName = Request.QueryString["refresh"];
                _RefreshCallName = AntiXss.JavaScriptEncode(_RefreshCallName, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_RefreshCallName))
                ///            {
                ///                //AntiXss
                ///                _RefreshCallName = "";
                ///            }
                _RSASignMode = Request.QueryString["sign"];
                _RSASignMode = AntiXss.JavaScriptEncode(_RSASignMode, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_RSASignMode))
                ///            {
                ///                //AntiXss
                ///                _RSASignMode = "";
                ///            }
                _ClientID = Request.QueryString["id"];
                _ClientID = AntiXss.JavaScriptEncode(_ClientID, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_ClientID))
                ///            {
                ///                //AntiXss
                ///                _ClientID = "";
                ///            }
                //_XSS = " <script>alert('1')</script>";
                //_FunctionName += ;
                string s = Request.QueryString["w"];
                if (StringHelper.IsValidString(s))
                {
                    _W = IntegerHelper.Int32Parse(s);
                }
                s = Request.QueryString["h"];
                if (StringHelper.IsValidString(s))
                {
                    _H = IntegerHelper.Int32Parse(s);
                }
                s = Request.QueryString["l"];
                if (StringHelper.IsValidString(s))
                {
                    _L = IntegerHelper.Int32Parse(s);
                }
                s = Request.QueryString["rsa"];
                if (StringHelper.IsValidString(s))
                {
                    byte[] buffer = Encoding.ASCII.GetBytes(s);
                    _RequestRSAPublicKey = CryptoHelper.BytesArrayToHexString(buffer);
                }
            }
        }
    }
    //CaptchaGenerator.aspx.cs
    namespace Microshaoft.WebSecurity
    {
        using System;
        using System.Configuration;
        using System.Text;
        using System.Web;
        using System.Web.UI;
        using System.Security.Cryptography;
        using Microshaoft;
        public class CaptchaGenerator : Page
        {
            public static string _UrlPrefix = ConfigurationManager.AppSettings["UrlPrefix"];
            private static string _ResponseSharedTripleDESKey = ConfigurationManager.AppSettings["ResponseSharedTripleDESKey"];
            private static string _ResponseSharedTripleDESIV = ConfigurationManager.AppSettings["ResponseSharedTripleDESIV"];
            private static string _ResponseRSAPrivateKey = ConfigurationManager.AppSettings["ResponseRSAPrivateKey"];
            private static string _InternalTripleDESKey = ConfigurationManager.AppSettings["InternalTripleDESKey"];
            private static string _InternalTripleDESIV = ConfigurationManager.AppSettings["InternalTripleDESIV"];
            private static string _CharactersText = ConfigurationManager.AppSettings["CharactersText"];
            public int _W = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultWidth"]);
            public int _H = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultHeight"]);
            public int _L = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultTextLength"]);
            public string _RequestRSAPublicKey;
            public string _RSASignMode;
            public string _ResponseRSAPublicKey;
            public string _ResponseRSASignature;
            public string _ImgID;
            public string _ImgObjVar = "var_" + Guid.NewGuid().ToString().Replace("-", "_");
            public string _CallbackName;
            public string _ClientID;
            public string _OrignalVerifyCode;
            public string _EncryptedVerifyCode;
            public string _InternalTripleDESEncryptedVerifyCode;
            public string _EncryptedMode;
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!_UrlPrefix.EndsWith("/"))
                {
                    _UrlPrefix += "/";
                }
                //AntiXss
                _ImgID = Request.QueryString["imgid"];
                ///            //AntiXss 方法1
                _ImgID = AntiXss.JavaScriptEncode(_ImgID, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_ImgID))
                ///            {
                ///                //AntiXss 方法2
                ///                _ImgID = "";
                ///            }
                _CallbackName = Request.QueryString["callback"];
                _CallbackName = AntiXss.JavaScriptEncode(_CallbackName, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_CallbackName))
                ///            {
                ///                //AntiXss
                ///                _CallbackName = "";
                ///            }
                _RequestRSAPublicKey = Request.QueryString["rsa"];
                _RequestRSAPublicKey = AntiXss.JavaScriptEncode(_RequestRSAPublicKey, false);
                ///            if (!RegexValidateHelper.IsValidHexString(_RequestRSAPublicKey))
                ///            {
                ///                //AntiXss
                ///                _RequestRSAPublicKey = "";
                ///            }
                _RSASignMode = Request.QueryString["sign"];
                _RSASignMode = AntiXss.JavaScriptEncode(_RSASignMode, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_RSASignMode))
                ///            {
                ///                //AntiXss
                ///                _RSASignMode = "";
                ///            }
                _ClientID = Request.QueryString["id"];
                _ClientID = AntiXss.JavaScriptEncode(_ClientID, false);
                ///            if (!RegexValidateHelper.IsValidNameOrID(_CallbackName))
                ///            {
                ///                //AntiXss
                ///                _ClientID = "";
                ///            }
                string s = Request.QueryString["w"];
                if (StringHelper.IsValidString(s))
                {
                    _W = IntegerHelper.Int32Parse(s);
                }
                s = Request.QueryString["h"];
                if (StringHelper.IsValidString(s))
                {
                    _H = IntegerHelper.Int32Parse(s);
                }
                s = Request.QueryString["l"];
                if (StringHelper.IsValidString(s))
                {
                    _L = IntegerHelper.Int32Parse(s);
                }
                s = RandomHelper.GenerateText
                                        (
                                            _CharactersText,
                                            _L
                                        );
                _OrignalVerifyCode = string.Format
                                                (
                                                    "{1}{0}{2}",
                                                    "\t",
                                                    s,
                                                    DateTime.Now.ToString("yyyyMMddHHmmss")
                                                );
                byte[] buffer = Encoding.ASCII.GetBytes(_OrignalVerifyCode);
                byte[] bytes = CryptoHelper.TripleDESEncrypt
                                                (
                                                    _OrignalVerifyCode,
                                                    Encoding.ASCII,
                                                    _InternalTripleDESKey,
                                                    _InternalTripleDESIV
                                                );
                _InternalTripleDESEncryptedVerifyCode = CryptoHelper.BytesArrayToHexString(bytes);
                if (StringHelper.IsValidString(_RequestRSAPublicKey)) //之前已经判断
                {
                    bytes = CryptoHelper.HexStringToBytesArray(_RequestRSAPublicKey);
                    CspParameters csp = new CspParameters();
                    //csp.Flags = CspProviderFlags.UseMachineKeyStore; //network service 不需要此句
                    RSACryptoServiceProvider provider = new RSACryptoServiceProvider(csp);
                    bytes = CryptoHelper.HexStringToBytesArray(_RequestRSAPublicKey);
                    string requestRSAPublicKey = Encoding.ASCII.GetString(bytes);
                    bytes = CryptoHelper.RSAEncrypt(provider, buffer, requestRSAPublicKey, true);
                    _EncryptedVerifyCode = CryptoHelper.BytesArrayToHexString(bytes);
                    _EncryptedMode = "RSA";
                }
                else
                {
                    bytes = CryptoHelper.TripleDESEncrypt
                                                    (
                                                        _OrignalVerifyCode,
                                                        Encoding.ASCII,
                                                        _ResponseSharedTripleDESKey,
                                                        _ResponseSharedTripleDESIV
                                                    );
                    _EncryptedVerifyCode = CryptoHelper.BytesArrayToHexString(bytes);
                    _EncryptedMode = "3DES";
                }
                if (StringHelper.IsValidString(_RSASignMode))
                {
                    CspParameters csp = new CspParameters();
                    //csp.Flags = CspProviderFlags.UseMachineKeyStore; //network service 不需要此句
                    RSACryptoServiceProvider provider = new RSACryptoServiceProvider(csp);
                    //rsa privateKey
                    provider.FromXmlString(_ResponseRSAPrivateKey);
                    string key = provider.ToXmlString(true);
                    if (_RSASignMode.ToLower() == "md5")
                    {
                        //signature rsa sha1
                        bytes = CryptoHelper.RSASignMD5(provider, buffer, key);
                    }
                    else if (_RSASignMode.ToLower() == "sha1")
                    {
                        //signature rsa md5
                        bytes = CryptoHelper.RSASignSHA1(provider, buffer, key);
                    }
                    _ResponseRSASignature = CryptoHelper.BytesArrayToHexString(bytes);
                    //rsa publicKey
                    key = provider.ToXmlString(false);
                    //bytes = Encoding.ASCII.GetBytes(key);
                    _ResponseRSAPublicKey = key;
                }
            }
        }
    }
    //Captcha.aspx.cs
    namespace Microshaoft.WebSecurity
    {
        using System;
        using System.Configuration;
        using System.Drawing;
        using System.Drawing.Imaging;
        using System.IO;
        using System.Text;
        using System.Web.UI;
        using Microshaoft;
        public class Captcha : Page
        {
            private static string _InternalTripleDESKey = ConfigurationManager.AppSettings["InternalTripleDESKey"];
            private static string _InternalTripleDESIV = ConfigurationManager.AppSettings["InternalTripleDESIV"];
            public int _W = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultWidth"]);
            public int _H = IntegerHelper.Int32Parse(ConfigurationManager.AppSettings["DefaultHeight"]);
            protected void Page_Load(object sender, EventArgs e)
            {
                string text = Request.QueryString["text"];
                byte[] buffer = null;
                try
                {
                    buffer = CryptoHelper.TripleDESDecrypt
                                                    (
                                                        CryptoHelper.HexStringToBytesArray(text),
                                                        CryptoHelper.HexStringToBytesArray(_InternalTripleDESKey),
                                                        CryptoHelper.HexStringToBytesArray(_InternalTripleDESIV)
                                                    );
                }
                catch// (Exception exception)
                {
                    buffer = new byte[0];
                }
                text = Encoding.ASCII.GetString(buffer);
                string[] a = text.Split(new char[] { '\t' });
                text = a[0];
                string s = Request.QueryString["w"];
                if (StringHelper.IsValidString(s))
                {
                    _W = IntegerHelper.Int32Parse(s);
                }
                s = Request.QueryString["h"];
                if (StringHelper.IsValidString(s))
                {
                    _H = IntegerHelper.Int32Parse(s);
                }
                Bitmap bmp = new Bitmap(_W, _H);
                //GraphicsHelper.DrawLinearGradientBackground(bmp);
                GraphicsHelper.DrawRandomColorsNoiseLines
                                                    (
                                                        bmp,
                                                        1
                                                    );
                GraphicsHelper.DrawRandomColorsNoisePoints
                                                    (
                                                        bmp,
                                                        1
                                                    );
                GraphicsHelper.DrawTextString
                                        (
                                            bmp,
                                            text,
                    ///                                        new Color[]
                    ///                                                {
                    ///                                                    Color.Black,
                    ///                                                    Color.Red,
                    ///                                                    Color.Green,
                    ///                                                    Color.Blue,
                    ///                                                },
                                            new string[]
                                                    {
                                                        "System",
                                                        "Courier New",
                                                        "Fixedsys",
                                                        "Arial",
    //                                                    "Arial Black",
                                                    }
                                        );
                GraphicsHelper.RandomDistortImage(bmp, 5);
                GraphicsHelper.DrawRandomColorsEdgeLine
                                                    (
                                                        bmp,
                                                        1
                                                    );
                MemoryStream ms = new MemoryStream();
                bmp.Save(ms, ImageFormat.Png);
                Response.ClearContent();
                //Response.ContentType = "image/Png";
                Response.BinaryWrite(ms.ToArray());
                bmp.Dispose();
                bmp = null;
            }
        }
    }
    //CryptoHelper.cs
    namespace Microshaoft
    {
        using System;
        using System.Security.Cryptography;
        using System.Text;
        using System.IO;
        class Class1
        {
            static void Main()
            {
                //RSA
                UTF8Encoding e = new UTF8Encoding();
                byte[] data = e.GetBytes("测试@microshaoft.com");
                byte[] encryptedData;
                //byte[] decryptedData;
                RSACryptoServiceProvider x = new RSACryptoServiceProvider();
                x.FromXmlString("<RSAKeyValue><Modulus>w7dgn+djOWI7ctEhI066QuQz8oF7Q2vUPQn/ypNkRJv+zFketiIFv0+Dlj9C3QVzZTri69BGA9F92h4ylImjmDqzONYF3Y5SWbiBed1yv57pUIGYSaV/JXBdNCztFYOgVgV/BTGWOYFF/Poc0hx5TGz4Pi98VsNqAHC6Vzjjp20=</Modulus><Exponent>AQAB</Exponent><P>58L7fZmUZ1kaHtXQi+IkWXt5HnoIRTdQOdYhPH7VTopXY8Ls/zJ/blK/JNsGLW/UcP4JQp2+peBo7ocZGfg33w==</P><Q>2C9X9cMmkvJphCW5nnbRObCyA1H+ni2Jrtw2FtjZXTU2YPnUSj4ZMMlTyqWIgDgFXRQl+KZvLPQUvgUGSTg6Mw==</Q><DP>h0E0khVaFYJbixlPTwOYIRy9D7s6LmLckBRWaz6978suuwrcUwa+db0WzkSAc23rNlIbR2RWCepQcrwnOw+wUw==</DP><DQ>Kjg8xmthWitrffpcIN11iP3AFjPqNPwRuouZKKca9EATKadA1WsBQmzfJ2Fioh/OtFnd/IyMg8v7TQzwKFaJzw==</DQ><InverseQ>F7IVGC70VctnvQiUwTeoAOQMIBa4l74IWsfxu2YCuv826L1/ETBbGXn2MgyJibTcLuXKxKZvbYQ8OW5wCvyLvg==</InverseQ><D>cZd8ADLW1xZZdKFGP2zRFEPIlqZp+U6bJzYnfNag6mUztDzBY2pJtaibsddTol4ohIdx7vW5vTuYdMD0EFv2Uz85t6jUi5oogZaKXv2vKSI5DHkWX2SyyEWceIPcf40qDG/xkGIrfL3nH8w6t7SY4ZKx6dn6wmAoFnZwcL2aPo0=</D></RSAKeyValue>");
                //<RSAKeyValue><Modulus>w7dgn+djOWI7ctEhI066QuQz8oF7Q2vUPQn/ypNkRJv+zFketiIFv0+Dlj9C3QVzZTri69BGA9F92h4ylImjmDqzONYF3Y5SWbiBed1yv57pUIGYSaV/JXBdNCztFYOgVgV/BTGWOYFF/Poc0hx5TGz4Pi98VsNqAHC6Vzjjp20=</Modulus><Exponent>AQAB</Exponent><P>58L7fZmUZ1kaHtXQi+IkWXt5HnoIRTdQOdYhPH7VTopXY8Ls/zJ/blK/JNsGLW/UcP4JQp2+peBo7ocZGfg33w==</P><Q>2C9X9cMmkvJphCW5nnbRObCyA1H+ni2Jrtw2FtjZXTU2YPnUSj4ZMMlTyqWIgDgFXRQl+KZvLPQUvgUGSTg6Mw==</Q><DP>h0E0khVaFYJbixlPTwOYIRy9D7s6LmLckBRWaz6978suuwrcUwa+db0WzkSAc23rNlIbR2RWCepQcrwnOw+wUw==</DP><DQ>Kjg8xmthWitrffpcIN11iP3AFjPqNPwRuouZKKca9EATKadA1WsBQmzfJ2Fioh/OtFnd/IyMg8v7TQzwKFaJzw==</DQ><InverseQ>F7IVGC70VctnvQiUwTeoAOQMIBa4l74IWsfxu2YCuv826L1/ETBbGXn2MgyJibTcLuXKxKZvbYQ8OW5wCvyLvg==</InverseQ><D>cZd8ADLW1xZZdKFGP2zRFEPIlqZp+U6bJzYnfNag6mUztDzBY2pJtaibsddTol4ohIdx7vW5vTuYdMD0EFv2Uz85t6jUi5oogZaKXv2vKSI5DHkWX2SyyEWceIPcf40qDG/xkGIrfL3nH8w6t7SY4ZKx6dn6wmAoFnZwcL2aPo0=</D></RSAKeyValue>
                string privateKey = x.ToXmlString(true);
                Console.WriteLine("RSA Private Key: {0}", privateKey);
                string publicKey = x.ToXmlString(false);
                Console.WriteLine("RSA Public Key: {0}", publicKey);
                //公钥加密
                encryptedData = CryptoHelper.RSAEncrypt(data, publicKey, false);
                //私钥解密
                data = CryptoHelper.RSADecrypt(encryptedData, privateKey, false);
                Console.WriteLine("RSA Decrypted plaintext: {0}", e.GetString(data));
                //私钥签名
                byte[] signature = CryptoHelper.RSASignSHA1(data, privateKey);
                //公钥验签
                Console.WriteLine(CryptoHelper.RSAVerifySHA1(data, publicKey, signature));
                //TripleDES
                string key = "000111222333444555666777888999aaabbbcccdddeeefff";//48
                key = "012345678901234567890123456789012345678901234567";
                key = "abcdefabcdefabcdefabcdefabcdefabcdefabcdefabcdef";
                key = "0123456789abcdef01111111111111111111111111111110";
                string iv = "0123456789abcdef";//16
                iv = "0000000000000000";
                data = e.GetBytes("测试@microshaoft.com");
                data = CryptoHelper.TripleDESEncrypt
                                                (
                                                    data,
                                                    CryptoHelper.HexStringToBytesArray(key),
                                                    CryptoHelper.HexStringToBytesArray(iv)
                                                );
                data = CryptoHelper.TripleDESDecrypt
                                                (
                                                    data,
                                                    CryptoHelper.HexStringToBytesArray(key),
                                                    CryptoHelper.HexStringToBytesArray(iv)
                                                );
                Console.WriteLine("3DES Decrypted plaintext: {0}", e.GetString(data));
                Console.WriteLine(Environment.Version.ToString());
            }
        }
        public static class CryptoHelper
        {
            public static byte[] RSASignSHA1
                                    (
                                        byte[] data
                                        , string privateKey
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                return RSASignSHA1
                            (
                                provider
                                , data
                                , privateKey
                            );
            }
            public static byte[] RSASignSHA1
                    (
                        RSACryptoServiceProvider provider
                        , byte[] data
                        , string privateKey
                    )
            {
                provider.FromXmlString(privateKey);
                return provider.SignHash
                                    (
                                        ComputeSHA1(data)
                                        , "SHA1"
                                    );
            }
            public static bool RSAVerifySHA1
                                    (
                                        byte[] data
                                        , string publicKey
                                        , byte[] signature
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                return RSAVerifySHA1
                                (
                                    provider
                                    , data
                                    , publicKey
                                    , signature
                                );
            }
            public static bool RSAVerifySHA1
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                        , string publicKey
                                        , byte[] signature
                                    )
            {
                provider.FromXmlString(publicKey);
                return provider.VerifyHash
                                    (
                                        ComputeSHA1(data)
                                        , "SHA1"
                                        , signature
                                    );
            }
            public static byte[] RSASignMD5
                                    (
                                        byte[] data
                                        , string privateKey
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                return RSASignMD5
                            (
                                provider
                                , data
                                , privateKey
                            );
            }
            public static byte[] RSASignMD5
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                        , string privateKey
                                    )
            {
                provider.FromXmlString(privateKey);
                return provider.SignHash
                            (
                                ComputeMD5(data)
                                , "MD5"
                            );
            }
            public static bool RSAVerifyMD5
                                    (
                                        byte[] data
                                        , string publicKey
                                        , byte[] signature
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                return RSAVerifyMD5
                                    (
                                        provider
                                        , data
                                        , publicKey
                                        , signature
                                    );
            }
            public static bool RSAVerifyMD5
                                    (
                                        RSACryptoServiceProvider provider
                                        , byte[] data
                                        , string publicKey
                                        , byte[] signature
                                    )
            {
                provider.FromXmlString(publicKey);
                return provider.VerifyHash
                                    (
                                        ComputeMD5(data)
                                        , "MD5"
                                        , signature
                                    );
            }
            public static byte[] RSAEncrypt
                                    (
                                        byte[] data
                                        , string publicKey
                                        , bool DoOAEPPadding
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                return RSAEncrypt
                            (
                                provider,
                                data,
                                publicKey,
                                DoOAEPPadding
                            );
            }
            public static byte[] RSAEncrypt
                            (
                                RSACryptoServiceProvider provider
                                , byte[] data
                                , string publicKey
                                , bool DoOAEPPadding
                            )
            {
                provider.FromXmlString(publicKey);
                return provider.Encrypt(data, DoOAEPPadding);
            }
            public static byte[] RSADecrypt
                                    (
                                        byte[] data
                                        , string privateKey
                                        , bool DoOAEPPadding
                                    )
            {
                RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
                return RSADecrypt
                            (
                                provider,
                                data,
                                privateKey,
                                DoOAEPPadding
                            );
            }
            public static byte[] RSADecrypt
                            (
                                RSACryptoServiceProvider provider
                                , byte[] data
                                , string privateKey
                                , bool DoOAEPPadding
                            )
            {
                provider.FromXmlString(privateKey);
                return provider.Decrypt(data, DoOAEPPadding);
            }
            public static byte[] TripleDESDecrypt
                                            (
                                                byte[] data
                                                , byte[] Key
                                                , byte[] IV
                                            )
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.Key = Key;
                des.IV = IV;
                return des.CreateDecryptor().TransformFinalBlock(data, 0, data.Length);
            }
            public static byte[] TripleDESDecrypt
                                            (
                                                string text
                                                , string HexStringKey
                                                , string HexStringIV
                                            )
            {
                return TripleDESDecrypt
                                (
                                    HexStringToBytesArray(text)
                                    , HexStringToBytesArray(HexStringKey)
                                    , HexStringToBytesArray(HexStringIV)
                                );
            }
            public static byte[] TripleDESDecrypt
                                        (
                                            string text
                                            , byte[] Key
                                            , byte[] IV
                                        )
            {
                return TripleDESDecrypt
                                (
                                    HexStringToBytesArray(text)
                                    , Key
                                    , IV
                                );
            }
            public static string TripleDESDecrypt
                                        (
                                            string text
                                            , string HexStringKey
                                            , string HexStringIV
                                            , Encoding e //原文的encoding
                                        )
            {
                return e.GetString
                    (
                        TripleDESDecrypt
                            (
                                text
                                , HexStringKey
                                , HexStringIV
                            )
                    );
            }
            public static string TripleDESDecrypt
                                        (
                                            string text
                                            , byte[] Key
                                            , byte[] IV
                                            , Encoding e //原文的encoding
                                        )
            {
                return e.GetString
                            (
                                TripleDESDecrypt
                                    (
                                        text
                                        , Key
                                        , IV
                                    )
                            );
            }
            public static string GenerateTripleDESHexStringKey()
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.GenerateKey();
                return BytesArrayToHexString(des.Key);
            }
            public static string GenerateTripleDESHexStringIV()
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.GenerateIV();
                return BytesArrayToHexString(des.IV);
            }
            public static byte[] TripleDESEncrypt
                                            (
                                                byte[] data
                                                , byte[] Key
                                                , byte[] IV
                                            )
            {
                TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
                des.Key = Key;
                des.IV = IV;
                return des.CreateEncryptor().TransformFinalBlock(data, 0, data.Length);
            }
            public static byte[] TripleDESEncrypt
                                            (
                                                string text
                                                , Encoding e
                                                , byte[] Key
                                                , byte[] IV
                                            )
            {
                return TripleDESEncrypt
                                (
                                    e.GetBytes(text)
                                    , Key
                                    , IV
                                );
            }
            public static byte[] TripleDESEncrypt
                                            (
                                                string text
                                                , Encoding e
                                                , string HexStringKey
                                                , string HexStringIV
                                            )
            {
                return TripleDESEncrypt
                                (
                                    text
                                    , e
                                    , HexStringToBytesArray(HexStringKey)
                                    , HexStringToBytesArray(HexStringIV)
                                );
            }
            public static byte[] ComputeSHA1(byte[] data)
            {
                return new SHA1CryptoServiceProvider().ComputeHash(data);
            }
            public static byte[] ComputeSHA1(string text, Encoding e)
            {
                return ComputeSHA1(e.GetBytes(text));
            }
            public static byte[] ComputeSHA1(string text)
            {
                return ComputeSHA1(text, Encoding.UTF8);
            }
            public static byte[] ComputeSHA1(Stream stream)
            {
                return new SHA1CryptoServiceProvider().ComputeHash(stream);
            }
            public static byte[] ComputeMD5(byte[] data)
            {
                return new MD5CryptoServiceProvider().ComputeHash(data, 0, data.Length);
            }
            public static byte[] ComputeMD5(string text, Encoding e)
            {
                return ComputeMD5(e.GetBytes(text));
            }
            public static byte[] ComputeMD5(string text)
            {
                return ComputeMD5(text, Encoding.UTF8);
            }
            public static byte[] ComputeMD5(Stream stream)
            {
                return new MD5CryptoServiceProvider().ComputeHash(stream);
            }
            public static string BytesArrayToHexString(byte[] data)
            {
                return BitConverter.ToString(data).Replace("-", "");
            }
            public static byte[] HexStringToBytesArray(string text)
            {
                text = text.Replace(" ", "");
                int l = text.Length;
                byte[] buffer = new byte[l / 2];
                for (int i = 0; i < l; i += 2)
                {
                    buffer[i / 2] = Convert.ToByte(text.Substring(i, 2), 16);
                }
                return buffer;
            }
        }
    }
    //DateTimeHelper.cs
    namespace Microshaoft
    {
        using System;
        using System.Globalization;
        public static class DateTimeHelper
        {
            public static bool IsVaildateTimestamp(DateTime timeStamp, int timeoutSeconds)
            {
                long l = SecondsDiffNow(timeStamp);
                return ((l > 0) && (l < timeoutSeconds));
            }
            public static long MillisecondsDiffNow(DateTime time)
            {
                long now = DateTime.Now.Ticks;
                long t = time.Ticks;
                return (now - t) / 10000;
            }
            public static long SecondsDiffNow(DateTime time)
            {
                return MillisecondsDiffNow(time) / 1000;
            }
            public static string Get_MMddHHmmss_String(DateTime time)
            {
                return time.ToString("MMddHHmmss");
            }
            public static string Get_yyyyMMddHHmmss_String(DateTime time)
            {
                return time.ToString("yyyyMMddHHmmss");
            }
            public static string Get_yyyyMMdd_String(DateTime time)
            {
                return time.ToString("yyyyMMdd");
            }
            public static DateTime Parse_yyyyMMddHHmmss(string text)
            {
                DateTime time = DateTime.TryParseExact
                                                (
                                                    text
                                                    , "yyyyMMddHHmmss"
                                                    , DateTimeFormatInfo.InvariantInfo
                                                    , DateTimeStyles.None
                                                    , out time
                                                ) ? time : DateTime.MinValue;
                return time;
            }
            public static DateTime Parse_MMddHHmmss(int year, string text)
            {
                return Parse_yyyyMMddHHmmss(year.ToString("0000") + text);
            }
        }
    }
    //IntegerHelper.cs
    namespace Microshaoft
    {
        using System;
        public static class IntegerHelper
        {
            public static int Int32Parse(string text)
            {
                int i = int.TryParse
                                (
                                    text
                                    , out i
                                ) ? i : int.MinValue;
                return i;
            }
            public static uint UInt32Parse(string text)
            {
                uint i = uint.TryParse
                                    (
                                        text
                                        , out i
                                    ) ? i : uint.MaxValue;
                return i;
            }
            public static short Int16Parse(string text)
            {
                short i = short.TryParse
                                    (
                                        text
                                        , out i
                                    ) ? i : short.MinValue;
                return i;
            }
            public static ushort UInt16Parse(string text)
            {
                ushort i = ushort.TryParse
                                        (
                                            text
                                            , out i
                                        ) ? i : ushort.MaxValue;
                return i;
            }
            public static long Int64Parse(string text)
            {
                long i = long.TryParse
                                    (
                                        text
                                        , out i
                                    ) ? i : long.MinValue;
                return i;
            }
            public static ulong UInt64Parse(string text)
            {
                ulong i = ulong.TryParse
                                    (
                                        text
                                        , out i
                                    ) ? i : ulong.MaxValue;
                return i;
            }
        }
    }
    //StringHelper.cs
    namespace Microshaoft
    {
        using System;
        public static class StringHelper
        {
            public static bool IsValidString(string text)
            {
                return
                    (
                        !string.IsNullOrEmpty(text) &&
                    ///                    text != string.Empty &&
                    ///                    text != null &&
                        text.Trim().Length > 0
                    );
            }
        }
    }
    //RandomHelper.cs
    namespace Microshaoft
    {
        using System;
        public class RandomHelper
        {
            public static string GenerateText
                                    (
                                        char[] characters
                                        , int length
                                    )
            {
                Random random = new Random();
                string s = "";
                //生成验证码字符串
                for (int i = 0; i < length; i++)
                {
                    s += characters[random.Next(characters.Length)];
                }
                return s;
            }
            public static string GenerateText
                                        (
                                            string charactersText
                                            , int length
                                        )
            {
                return GenerateText
                                (
                                    charactersText.ToCharArray(),
                                    length
                                );
            }
        }
    }
    //GraphicsHelper.cs
    namespace Microshaoft
    {
        using System;
        using System.Drawing;
        using System.Drawing.Text;
        using System.Drawing.Imaging;
        using System.Drawing.Drawing2D;
        public static class GraphicsHelper
        {
            private struct FontState
            {
                public Font TextFont;
                public float TextWidth;
                public float TextHeight;
            }
            public static void DrawLinearGradientBackground
                                            (
                                                Bitmap bmp
                                            )
            {
                Random random = new Random();
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    using (
                            Brush b = new LinearGradientBrush
                                                    (
                                                        new Rectangle
                                                                    (
                                                                        0,
                                                                        0,
                                                                        bmp.Width,
                                                                        bmp.Height
                                                                    ),
                                                        Color.FromArgb
                                                                    (
                                                                        random.Next(256),
                                                                        random.Next(256),
                                                                        random.Next(256)
                                                                    ),
                                                        //Color.Green,
                                                        Color.FromArgb
                                                                    (
                                                                        random.Next(256),
                                                                        random.Next(256),
                                                                        random.Next(256)
                                                                    ),
                                                        //Color.Yellow,
                                                        (float) (random.Next() * 360),
                                                        false
                                                    )
                            )
                    {
                        g.FillRectangle(b, 0, 0, bmp.Width, bmp.Height);
                    }
                }
            }
            public static void DrawTextString
                            (
                                Bitmap bmp,
                                string text,
                //                            Color[] foregroundColors,
                                string[] fontsNames
                            )
            {
                Random random = new Random();
                using (Graphics g = Graphics.FromImage(bmp))
                {
                    g.SmoothingMode = SmoothingMode.AntiAlias;
                    g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
                    int l = text.Length;
                    float w = (float) bmp.Width / l;
                    float h = (float) bmp.Height;
                    float p = 0f;
                    FontState[] fontStates = new FontState[l];
                    for (int i = 0; i < l; i++)
                    {
                        FontStyle fs = FontStyle.Bold;
                        if (random.Next() % 2 == 0)
                        {
                            fs |= FontStyle.Italic;
                        }
                        float fontSize = (w < h ? w : h);
                        Font font;
                        SizeF sizeF;
                        do
                        {
                            font = new Font
                                        (
                                            fontsNames[random.Next(fontsNames.Length)],
                                            fontSize,
                                            fs
                                        );
                            fontSize --;
                            sizeF = g.MeasureString(text[i].ToString(), font);
                        } while ((sizeF.Width > w) || (sizeF.Height > h));
                        FontState state = new FontState();
                        state.TextFont = font;
                        state.TextWidth = (sizeF.Width);
                        state.TextHeight = (sizeF.Height);
                        fontStates[i] = state;
                        p += sizeF.Width;
                    }
                    p = (bmp.Width - p) / 2.0f;
                    for (int i = 0; i < fontStates.Length; i++)
                    {
    //                    Color color = ;
                        using (Brush brush = new LinearGradientBrush
                                                            (
                                                                new Rectangle
                                                                        (
                                                                            0,
                                                                            0,
                                                                            (int) fontStates[i].TextWidth / 2,
                                                                            (int) fontStates[i].TextHeight / 2
                                                                        ),
                                                                //Color.Black,
                                                                Color.FromArgb
                                                                            (
                                                                                random.Next(256),
                                                                                random.Next(256),
                                                                                random.Next(256)
                                                                            ),
                                                                //Color.Blue,
                                                                Color.FromArgb
                                                                            (
                                                                                random.Next(256),
                                                                                random.Next(256),
                                                                                random.Next(256)
                                                                            ),
                                                                (float) (random.Next() * 360),
                                                                false
                                                            )
                            )
                        {
                            Brush b =  new SolidBrush(Color.Black);
    ///                                                (
    ///                                                    Color.FromArgb
    ///                                                                (
    ///                                                                    random.Next(256),
    ///                                                                    random.Next(256),
    ///                                                                    random.Next(256)
    ///                                                                )
    ///                                                );
                            g.DrawString
                            (
                                text[i].ToString()
                                , fontStates[i].TextFont
                                , b
                                , (float) p - 1
                                , (bmp.Height - fontStates[i].TextHeight) / 2.0f - 1
                            );
                            g.DrawString
                            (
                                text[i].ToString()
                                , fontStates[i].TextFont
                                , b
                                , (float) p + 1
                                , (bmp.Height - fontStates[i].TextHeight) / 2.0f + 1
                            );
    ///                        GraphicsPath gp = new GraphicsPath();
    ///                        gp.AddString
    ///                                (
    ///                                    text[i].ToString(),
    ///                                    fontStates[i].TextFont.FontFamily,
    ///                                    (int) FontStyle.Bold,
    ///                                    fontStates[i].TextFont.Size,
    ///                                    new PointF(p, (bmp.Height - fontStates[i].TextHeight) / 2.0f),
    ///                                    StringFormat.GenericDefault
    ///                                );
    ///                       g.DrawPath(new Pen(Color.Red, 1), gp);
                            g.DrawString
                            (
                                text[i].ToString()
                                , fontStates[i].TextFont
                                , brush
                                , (float) p
                                , (bmp.Height - fontStates[i].TextHeight) / 2.0f
                            );
                        }
                        p += fontStates[i].TextWidth;
                    }
                }
            }
            public static void RandomDistortImage(Bitmap bmp, int i)
            {
                Random random = new Random();
                double d = i * (random.Next(2) == 1 ? 1 : -1);
                DistortImage(bmp, d);
            }
            public static void DistortImage
                                    (
                                        Bitmap bmp,
                                        double distortion
                                    )
            {
                int width = bmp.Width;
                int height = bmp.Height;
                using (Bitmap copy = (Bitmap)bmp.Clone())
                {
                    for (int y = 0; y < height; y++)
                    {
                        for (int x = 0; x < width; x++)
                        {
                            int newX = (int)(x + (distortion * Math.Sin(Math.PI * y / 64)));
                            int newY = (int)(y + (distortion * Math.Cos(Math.PI * x / 64)));
                            if (newX < 0 || newX >= width)
                            {
                                newX = 0;
                            }
                            if (newY < 0 || newY >= height)
                            {
                                newY = 0;
                            }
                            bmp.SetPixel(x, y, copy.GetPixel(newX, newY));
                        }
                    }
                }
            }
            public static Bitmap Clear
                                    (
                                        Bitmap bmp,
                                        Color color
                                    )
            {
                Graphics g = Graphics.FromImage(bmp);
                g.Clear(color);
                g.Dispose();
                g = null;
                return bmp;
            }
            public static Bitmap DrawRandomColorsNoiseLines
                                                    (
                                                        Bitmap bmp,
                                                        int lineWidth
                                                    )
            {
                Random random = new Random();
                Graphics g = Graphics.FromImage(bmp);
                g.SmoothingMode = SmoothingMode.AntiAlias;
                //画噪线
                int area = bmp.Width * bmp.Height;
                for (int i = 0; i < area / 500; i++)
                {
                    int x1 = random.Next(bmp.Width);
                    int y1 = random.Next(bmp.Height);
                    int x2 = random.Next(bmp.Width);
                    int y2 = random.Next(bmp.Height);
                    g.DrawLine
                            (
                                new Pen
                                        (
                                            Color.FromArgb
                                                        (
                                                            random.Next(256),
                                                            random.Next(256),
                                                            random.Next(256)
                                                        ),
                                            lineWidth
                                        ),
                                x1,
                                y1,
                                x2,
                                y2
                            );
                }
                g.Dispose();
                g = null;
                return bmp;
            }
            public static void DrawRandomColorsNoisePoints
                                                    (
                                                        Bitmap bmp,
                                                        int brushWidth
                                                    )
            {
                Random random = new Random();
                Graphics g = Graphics.FromImage(bmp);
                g.SmoothingMode = SmoothingMode.AntiAlias;
                int area = bmp.Width * bmp.Height;
                //画噪点
                for (int i = 0; i < area / 20; i++)
                {
                    int x = random.Next(bmp.Width);
                    int y = random.Next(bmp.Height);
                    bmp.SetPixel
                            (
                                x,
                                y,
                                Color.FromArgb
                                            (
                                                random.Next(256),
                                                random.Next(256),
                                                random.Next(256)
                                            )
                            );
                }
                g.Dispose();
                g = null;
            }
            public static void DrawRandomColorsEdgeLine
                                                (
                                                    Bitmap bmp,
                                                    int brushWidth
                                                )
            {
                Random random = new Random();
                Graphics g = Graphics.FromImage(bmp);
                g.SmoothingMode = SmoothingMode.AntiAlias;
                //画边框
                g.DrawLine
                        (
                            new Pen
                                    (
                                        Color.FromArgb
                                                    (
                                                        random.Next(256),
                                                        random.Next(256),
                                                        random.Next(256)
                                                    ),
                                        brushWidth
                                    ),
                            0,
                            0,
                            bmp.Width - 1,
                            0
                        );
                g.DrawLine
                        (
                            new Pen
                                    (
                                        Color.FromArgb
                                                    (
                                                        random.Next(256),
                                                        random.Next(256),
                                                        random.Next(256)
                                                    ),
                                        brushWidth
                                    ),
                            0,
                            0,
                            0,
                            bmp.Height - 1
                        );
                g.DrawLine
                        (
                            new Pen
                                    (
                                        Color.FromArgb
                                                    (
                                                        random.Next(256),
                                                        random.Next(256),
                                                        random.Next(256)
                                                    ),
                                        brushWidth
                                    ),
                            bmp.Width - 1,
                            0,
                            bmp.Width - 1,
                            bmp.Height - 1
                        );
                g.DrawLine
                        (
                            new Pen
                                    (
                                        Color.FromArgb
                                                    (
                                                        random.Next(256),
                                                        random.Next(256),
                                                        random.Next(256)
                                                    ),
                                        brushWidth
                                    ),
                            0,
                            bmp.Height - 1,
                            bmp.Width - 1,
                            bmp.Height - 1
                        );
                g.Dispose();
                g = null;
            }
        }
    }
    //RegexValidateHelper.cs
    namespace Microshaoft
    {
        //using System;
        using System.Text.RegularExpressions;
        public static class RegexValidateHelper
        {
            public static bool IsValidNameOrID(string s)
            {
                return StringHelper.IsValidString(s) && Regex.IsMatch(s, @"^[_A-Za-z]\w+$");
            }
            public static bool IsValidHexString(string s)
            {
                return StringHelper.IsValidString(s) && Regex.IsMatch(s, @"[0-9A-Fa-f]");
            }
            public static bool IsValidEmail(string s)
            {
                return Regex.IsMatch(s, @"([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$");
            }
            public static bool IsValidDate(string s)
            {
                return Regex.IsMatch(s, @"((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$");
            }
            public static bool IsValidDateTime(string s)
            {
                return Regex.IsMatch(s, @"((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\d):[0-5]?\d:[0-5]?\d$");
            }
        }
    }
    namespace Microshaoft //Microsoft.Security.Application
    {
        #region Namespaces
        using System;
        using System.Drawing;
        using System.Web;
        using System.Text;
        #endregion
        #region Namespace - Microsoft.Security.Application
        public class AntiXss
        {
            #region MEMBERS
            ///---------------------------------------------------------------------
            /// <summary>
            ///     Empty string for Visual Basic Script contextes
            /// </summary>
            ///---------------------------------------------------------------------
            private const string EmptyStringVBS = "\"\"";
            ///---------------------------------------------------------------------
            /// <summary>
            ///     Empty string for Java Script contextes
            /// </summary>
            ///---------------------------------------------------------------------
            private const string EmptyStringJavaScript = "''";
            #region WHITELIST_CHAR_ARRAY_INITIALIZATION
            /// <summary>
            /// Initializes character Html encoding array
            /// </summary>
            private static char[][] WhitelistCodes = InitWhitelistCodes();
            private static char[][] InitWhitelistCodes()
            {
                char[][] allCharacters = new char[65536][];
                char[] thisChar;
                for (int i = 0; i < allCharacters.Length; i++)
                {
                    if (
                        (i >= 97 && i <= 122) ||        // a-z
                        (i >= 65 && i <= 90) ||         // A-Z
                        (i >= 48 && i <= 57) ||         // 0-9
                        i == 32 ||                      // space
                        i == 46 ||                      // .
                        i == 44 ||                      // ,
                        i == 45 ||                      // -
                        i == 95 ||                      // _
                        (i >= 256 && i <= 591) ||       // Latin,Extended-A,Latin Extended-B
                        (i >= 880 && i <= 2047) ||      // Greek and Coptic,Cyrillic,Cyrillic Supplement,Armenian,Hebrew,Arabic,Syriac,Arabic,Supplement,Thaana,NKo
                        (i >= 2304 && i <= 6319) ||     // Devanagari,Bengali,Gurmukhi,Gujarati,Oriya,Tamil,Telugu,Kannada,Malayalam,Sinhala,Thai,Lao,Tibetan,Myanmar,eorgian,Hangul Jamo,Ethiopic,Ethiopic Supplement,Cherokee,Unified Canadian Aboriginal Syllabics,Ogham,Runic,Tagalog,Hanunoo,Buhid,Tagbanwa,Khmer,Mongolian
                        (i >= 6400 && i <= 6687) ||     // Limbu, Tai Le, New Tai Lue, Khmer, Symbols, Buginese
                        (i >= 6912 && i <= 7039) ||     // Balinese
                        (i >= 7680 && i <= 8191) ||     // Latin Extended Additional, Greek Extended
                        (i >= 11264 && i <= 11743) ||   // Glagolitic, Latin Extended-C, Coptic, Georgian Supplement, Tifinagh, Ethiopic Extended
                        (i >= 12352 && i <= 12591) ||   // Hiragana, Katakana, Bopomofo
                        (i >= 12688 && i <= 12735) ||   // Kanbun, Bopomofo Extended
                        (i >= 12784 && i <= 12799) ||   // Katakana, Phonetic Extensions
                        (i >= 40960 && i <= 42191) ||   // Yi Syllables, Yi Radicals
                        (i >= 42784 && i <= 43055) ||   // Latin Extended-D, Syloti, Nagri
                        (i >= 43072 && i <= 43135) ||   // Phags-pa
                        (i >= 44032 && i <= 55215) ||   // Hangul Syllables
                        (i >= 19968 && i <= 40899)      // Mixed japanese/chinese/korean
                    )
                    {
                        allCharacters[i] = null;
                    }
                    else
                    {
                        string iString = i.ToString();
                        int iStringLen = iString.Length;
                        thisChar = new char[iStringLen];     // everything else
                        for (int j = 0; j < iStringLen; j++)
                        {
                            thisChar[j] = iString[j];
                        }
                        allCharacters[i] = thisChar;
                    }
                }
                return allCharacters;
            }
            #endregion
            #endregion
            #region Encoding Methods
            #region HTMLEncode - string input
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in HTML.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <returns>
            ///     Encoded string for use in HTML.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the &amp;#DECIMAL; notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Space</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>alert&#40;&#39;XSS Attack&#33;&#39;&#41;&#59;</description></item>
            /// <item><term>user@contoso.com</term><description>user&#64;contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross Site Scripting Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string HtmlEncode(string input)
            {
                if (String.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                // Use a new char array.
                int len = 0;
                int tLen = input.Length;
                char[] returnMe = new char[tLen * 8];
                char[] thisChar;
                int thisCharID;
                for (int i = 0; i < tLen; i++)
                {
                    thisCharID = (int)input[i];
                    if (WhitelistCodes[thisCharID] != null)
                    {
                        // character needs to be encoded
                        thisChar = WhitelistCodes[thisCharID];
                        returnMe[len++] = '&';
                        returnMe[len++] = '#';
                        for (int j = 0; j < thisChar.Length; j++)
                        {
                            returnMe[len++] = thisChar[j];
                        }
                        returnMe[len++] = ';';
                    }
                    else
                    {
                        // character does not need encoding
                        returnMe[len++] = input[i];
                    }
                }
                return new String(returnMe, 0, len);
            }
            #endregion
            #region HTMLEncode - string input, KnownColor clr
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input string and embeds in a SPAN tag for use in HTML.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <param name="clr">KnownColor like System.Drawing.KnownColor.CadetBlue</param>
            /// <returns>
            ///     Encoded string embebded within SPAN tag and style settings for use in HTML.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the &amp;#DECIMAL; notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Space</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description><div style='background-color : #ffffff'>alert&#40;&#39;XSS Attack&#33;&#39;&#41;&#59;</div></description></item>
            /// <item><term>user@contoso.com</term><description>user&#64;contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross Site Scripting Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string HtmlEncode(string input, KnownColor clr)
            {
                //HTMLEncode will handle the encoding
                // This check is for making sure that bgcolor is required or not.
                if (HttpContext.Current.Request.QueryString["MarkAntiXssOutput"] != null)
                {
                    string returnInput = "<span name='#markantixssoutput' style ='background-color : " + Color.FromKnownColor(clr).Name + "'>" + HtmlEncode(input) + "</span>";
                    return returnInput;
                }
                else
                {
                    return HtmlEncode(input);
                }
            }
            #endregion
            #region HTMLAttributeEncode_Method
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in HTML attributes.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <returns>
            ///     Encoded string for use in HTML attributes.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the &amp;#DECIMAL; notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>alert&#40;&#39;XSS&#32;Attack&#33;&#39;&#41;&#59;</description></item>
            /// <item><term>user@contoso.com</term><description>user&#64;contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross&#32;Site&#32;Scripting&#32;Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string HtmlAttributeEncode(string input)
            {
                if (String.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                // Use a new char array.
                int len = 0;
                int tLen = input.Length;
                char[] returnMe = new char[tLen * 8]; // worst case length scenario
                char[] thisChar;
                int thisCharID;
                for (int i = 0; i < tLen; i++)
                {
                    thisCharID = (int)input[i];
                    if ((WhitelistCodes[thisCharID] != null)
                        || (thisCharID == 32)   //escaping space for HTMLAttribute Encoding
                        )
                    {
                        // character needs to be encoded
                        thisChar = WhitelistCodes[thisCharID];
                        returnMe[len++] = '&';
                        returnMe[len++] = '#';
                        if (thisCharID == 32)
                        {
                            returnMe[len++] = '3';
                            returnMe[len++] = '2';
                        }
                        else
                        {
                            for (int j = 0; j < thisChar.Length; j++)
                            {
                                returnMe[len++] = thisChar[j];
                            }
                        }
                        returnMe[len++] = ';';
                    }
                    else
                    {
                        // character does not need encoding
                        returnMe[len++] = input[i];
                    }
                }
                return new String(returnMe, 0, len);
            }
            #endregion
            #region URLEncode_Method
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in universal resource locators (URLs).
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <returns>
            ///     Encoded string for use in URLs.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the %SINGLE_BYTE_HEX and %uDOUBLE_BYTE_HEX notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>alert%28%27XSS%20Attack%21%27%29%3b</description></item>
            /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross%20Site%20Scripting%20Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string UrlEncode(string input)
            {
                if (String.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                // Use a new char array.
                int len = 0;
                int tLen = input.Length;
                int thisCharID;
                string thisChar;
                char ch;
                Encoding inputEncoding = null;
                // Use a new char array.
                char[] returnMe = new char[tLen * 24];
                for (int i = 0; i < tLen; i++)
                {
                    thisCharID = (int)input[i];
                    thisChar = input[i].ToString();
                    if ((WhitelistCodes[thisCharID] != null)
                        || (thisCharID == 32) || (thisCharID == 44)    //escaping SPACE and COMMA for URL Encoding
                         )
                    {
                        // Character needs to be encoded to default UTF-8.
                        inputEncoding = Encoding.UTF8;
                        byte[] inputEncodingBytes = inputEncoding.GetBytes(thisChar);
                        int noinputEncodingBytes = inputEncodingBytes.Length;
                        for (int index = 0; index < noinputEncodingBytes; index++)
                        {
                            ch = (char)inputEncodingBytes[index];
                            // character needs to be encoded. Infact the byte cannot be greater than 256.
                            if (ch <= 256)
                            {
                                returnMe[len++] = '%';
                                string hex = ((int)ch).ToString("x").PadLeft(2, '0');
                                returnMe[len++] = hex[0];
                                returnMe[len++] = hex[1];
                            }
                        }
                    }
                    else
                    {
                        // character does not need encoding
                        returnMe[len++] = input[i];
                    }
                }
                return new String(returnMe, 0, len);
            }
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in universal resource locators (URLs).
            /// </summary>
            /// <param name="input">Input string</param>
            /// <param name="codepage">Codepage number of the input</param>
            /// <returns>
            ///     Encoded string for use in URLs.
            /// </returns>
            /// <remarks>
            /// This function will encodes the output as per the encoding parameter (codepage) passed to it. It will encode all but known safe characters.  Encoded characters are encoded using the %SINGLE_BYTE_HEX and %DOUBLE_BYTE_HEX notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSSあAttack!');</term><description>alert%28%27XSS%82%a0Attack%21%27%29%3b</description></item>
            /// <item><term>user@contoso.com</term><description>user%40contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross%20Site%20Scripting%20Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string UrlEncode(string input, int codepage)
            {
                if (String.IsNullOrEmpty(input))
                {
                    return string.Empty;
                }
                int len = 0;
                int thisCharID;
                int tLen = input.Length;
                char ch;
                string thisChar;
                Encoding inputEncoding = null;
                // Use a new char array.
                char[] returnMe = new char[tLen * 24]; // worst case length scenario
                for (int i = 0; i < tLen; i++)
                {
                    thisCharID = (int)input[i];
                    thisChar = input[i].ToString();
                    if ((WhitelistCodes[thisCharID] != null)
                        || (thisCharID == 32) || (thisCharID == 44)    //escaping SPACE and COMMA for URL Encoding
                         )
                    {
                        // character needs to be encoded
                        inputEncoding = Encoding.GetEncoding(codepage);
                        byte[] inputEncodingBytes = inputEncoding.GetBytes(thisChar);
                        int noinputEncodingBytes = inputEncodingBytes.Length;
                        for (int index = 0; index < noinputEncodingBytes; index++)
                        {
                            ch = (char)inputEncodingBytes[index];
                            // character needs to be encoded. Infact the byte cannot be greater than 256.
                            if (ch <= 256)
                            {
                                returnMe[len++] = '%';
                                string hex = ((int)ch).ToString("x").PadLeft(2, '0');
                                returnMe[len++] = hex[0];
                                returnMe[len++] = hex[1];
                            }
                        }
                    }
                    else
                    {
                        // character does not need encoding
                        returnMe[len++] = input[i];
                    }
                }
                return new String(returnMe, 0, len);
            }
            #endregion
            #region XMLEncode_Method
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in XML.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <returns>
            ///     Encoded string for use in XML.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the &amp;#DECIMAL; notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Space</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>alert&#40;&#39;XSS Attack&#33;&#39;&#41;&#59;</description></item>
            /// <item><term>user@contoso.com</term><description>user&#64;contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross Site Scripting Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string XmlEncode(string input)
            {
                // HtmlEncode will handle input
                return HtmlEncode(input);
            }
            #endregion
            #region XMLAttributeEncode_Method
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in XML attributes.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <returns>
            ///     Encoded string for use in XML attributes.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the &amp;#DECIMAL; notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>alert&#40;&#39;XSS&#32;Attack&#33;&#39;&#41;&#59;</description></item>
            /// <item><term>user@contoso.com</term><description>user&#64;contoso.com</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>Anti-Cross&#32;Site&#32;Scripting&#32;Library</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string XmlAttributeEncode(string input)
            {
                //HtmlEncodeAttribute will handle input
                return HtmlAttributeEncode(input);
            }
            #endregion
            #region JavaScriptEncode_Method
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in JavaScript.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// <returns>
            ///     Encoded string for use in JavaScript.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the \xSINGLE_BYTE_HEX and \uDOUBLE_BYTE_HEX notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Space</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>'alert\x28\x27XSS Attack\x21\x27\x29\x3b'</description></item>
            /// <item><term>user@contoso.com</term><description>'user\x40contoso.com'</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>'Anti-Cross Site Scripting Library'</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string JavaScriptEncode(string input)
            {
                return JavaScriptEncode(input, true);
            }
            ///---------------------------------------------------------------------
            /// <summary>
            /// Encodes input strings for use in JavaScript.
            /// </summary>
            /// <param name="input">String to be encoded</param>
            /// /// <param name="flagforQuote">bool flag to determin to emit quote or not. true - emit quote. false = no quote.</param>
            /// <returns>
            ///     Encoded string for use in JavaScript and does not return the output with en quotes.
            /// </returns>
            /// <remarks>
            /// This function will encode all but known safe characters.  Encoded characters are encoded using the \xSINGLE_BYTE_HEX and \uDOUBLE_BYTE_HEX notation.
            /// <newpara/>
            /// Safe characters include:
            /// <list type="table">
            /// <item><term>a-z</term><description>Lower case alphabet</description></item>
            /// <item><term>A-Z</term><description>Upper case alphabet</description></item>
            /// <item><term>0-9</term><description>Numbers</description></item>
            /// <item><term>,</term><description>Comma</description></item>
            /// <item><term>.</term><description>Period</description></item>
            /// <item><term>-</term><description>Dash</description></item>
            /// <item><term>_</term><description>Underscore</description></item>
            /// <item><term> </term><description>Space</description></item>
            /// <item><term> </term><description>Other International character ranges</description></item>
            /// </list>
            /// <newpara/>
            /// Example inputs and encoded outputs:
            /// <list type="table">
            /// <item><term>alert('XSS Attack!');</term><description>'alert\x28\x27XSS Attack\x21\x27\x29\x3b'</description></item>
            /// <item><term>user@contoso.com</term><description>'user\x40contoso.com'</description></item>
            /// <item><term>Anti-Cross Site Scripting Library</term><description>'Anti-Cross Site Scripting Library'</description></item>
            /// </list></remarks>
            ///---------------------------------------------------------------------
            public static string JavaScriptEncode(string input, bool flagforQuote)
            {
                // Input validation: empty or null string condition
                if (String.IsNullOrEmpty(input))
                {
                    if (flagforQuote)
                    {
                        return (EmptyStringJavaScript);
                    }
                    else
                    {
                        return "";
                    }
                }
                // Use a new char array.
                int len = 0;
                int tLen = input.Length;
                char[] returnMe = new char[tLen * 8]; // worst case length scenario
                char[] thisChar;
                char ch;
                int thisCharID;
                // First step is to start the encoding with an apostrophe if flag is true.
                if (flagforQuote)
                {
                    returnMe[len++] = '\'';
                }
                for (int i = 0; i < tLen; i++)
                {
                    thisCharID = (int)input[i];
                    ch = input[i];
                    if (WhitelistCodes[thisCharID] != null)
                    {
                        // character needs to be encoded
                        thisChar = WhitelistCodes[thisCharID];
                        if (thisCharID > 127)
                        {
                            returnMe[len++] = '\\';
                            returnMe[len++] = 'u';
                            string hex = ((int)ch).ToString("x").PadLeft(4, '0');
                            returnMe[len++] = hex[0];
                            returnMe[len++] = hex[1];
                            returnMe[len++] = hex[2];
                            returnMe[len++] = hex[3];
                        }
                        else
                        {
                            returnMe[len++] = '\\';
                            returnMe[len++] = 'x';
                            string hex = ((int)ch).ToString("x").PadLeft(2, '0');
                            returnMe[len++] = hex[0];
                            returnMe[len++] = hex[1];
                        }
                    }
                    else
                    {
                        // character does not need encoding
                        returnMe[len++] = input[i];
                    }
                }
                // Last step is to end the encoding with an apostrophe if flag is true.
                if (flagforQuote)
                {
                    returnMe[len++] = '\'';
                }
                return new String(returnMe, 0, len);
            }
            #endregion
            #region VisualBasicScriptEncode_Method
            public static string VisualBasicScriptEncode(string input)
            {
                // Input validation: empty or null string condition
                if (String.IsNullOrEmpty(input))
                {
                    return (EmptyStringVBS);
                }
                // Use a new char array.
                int len = 0;
                int tLen = input.Length;
                char[] returnMe = new char[tLen * 12]; // worst case length scenario
                char ch2;
                string temp;
                int thisCharID;
                //flag to surround double quotes around safe characters
                bool bInQuotes = false;
                for (int i = 0; i < tLen; i++)
                {
                    thisCharID = (int)input[i];
                    ch2 = input[i];
                    if (WhitelistCodes[thisCharID] != null)
                    {
                        // character needs to be encoded
                        // surround in quotes
                        if (bInQuotes)
                        {
                            // get out of quotes
                            returnMe[len++] = '"'; ;
                            bInQuotes = false;
                        }
                        // adding "encoded" characters
                        temp = "&chrw(" + ((uint)ch2).ToString() + ")";
                        foreach (char ch in temp)
                        {
                            returnMe[len++] = ch;
                        }
                    }
                    else
                    {
                        // character does not need encoding
                        //surround in quotes
                        if (!bInQuotes)
                        {
                            // add quotes to start
                            returnMe[len++] = '&';
                            returnMe[len++] = '"';
                            bInQuotes = true;
                        }
                        returnMe[len++] = input[i];
                    }
                }
                // if we're inside of quotes, close them
                if (bInQuotes)
                {
                    returnMe[len++] = '"';
                }
                // finally strip extraneous "&" from beginning of the string, if necessary and RETURN
                if (returnMe.Length > 0 && returnMe[0] == '&')
                {
                    return new String(returnMe, 1, len - 1);
                }
                else
                {
                    return new String(returnMe, 0, len);
                }
            }
            #endregion
            #endregion
        }
    }
    #endregion
    
    
    
    //CaptchaPlaceHolder.aspx
    <%@ Page ContentType="text/x-javascript" ValidateRequest="false" Language="C#" AutoEventWireup="true" Inherits="Microshaoft.WebSecurity.CaptchaPlaceHolder" %>
    <%@ Import Namespace="Microshaoft" %>
    document.write('<div id="<%= _DivID%>" style="display:none">');
    function <%= _FunctionName%>()
    {
        var <%= _DivChildrenNodesObjVar%> = document.getElementById("<%= _DivID%>").childNodes;
        if (<%= _DivChildrenNodesObjVar%>)
        {
            for (var <%= _iVar%> = <%= _DivChildrenNodesObjVar%>.length - 1; <%= _iVar%> >= 0; <%= _iVar%> --)
            {
                var <%= _DivChildNodeObjVar%> = <%= _DivChildrenNodesObjVar%>[<%= _iVar%>];
                <%= _DivChildNodeObjVar%>.parentNode.removeChild(<%= _DivChildNodeObjVar%>);
            }
        }
        var <%= _ScriptObjVar%> = document.createElement("SCRIPT");
        <%= _ScriptObjVar%>.src= "<%= _UrlPrefix%>CaptchaGenerator.aspx?imgid=<%= _ImgID%>&callback=<%= _CallbackName%>&refresh=<%= _RefreshCallName%>&id=<%= _ClientID%>&sign=<%= _RSASignMode%>&l=<%= _L%>&w=<%= _W%>&h=<%= _H%>&rsa=<%= _RequestRSAPublicKey%>&r=" + Math.random();
        document.getElementById("<%= _DivID%>").appendChild(<%= _ScriptObjVar%>);
        //alert(<%= _DivChildrenNodesObjVar%>.length);
    }
    document.write('</div>');
    document.write('<table border="0"><tr><td align="center">');
    document.write('<Img id="<%= _ImgID%>" width="<%= _W%>" height="<%= _H%>" />');
    document.write('</td></tr>');
    <%
    if (!StringHelper.IsValidString(_RefreshCallName))
    {
    %>
        document.write('<tr><td align="center">');1
        document.write('<button onclick="<%= _FunctionName%>()">看不清,再换一张!</button>');
        document.write('</td></tr>');
    <%
    }
    %>
    document.write('</table>');
    <%= _FunctionName%>();
    <%
    if (StringHelper.IsValidString(_RefreshCallName))
    {
    %>
        function <%= _RefreshCallName%>()
        {
            <%= _FunctionName%>();
        }
    <%
    }
    %>
    
    
    
    //CaptchaGenerator.aspx
    <%@ Page ContentType="text/x-javascript" Language="C#" AutoEventWireup="true" Inherits="Microshaoft.WebSecurity.CaptchaGenerator" %>
    var <%= _ImgObjVar%> = document.getElementById("<%= _ImgID%>");
    <%= _ImgObjVar%>.src="<%= _UrlPrefix%>Captcha.aspx?text=<%= _InternalTripleDESEncryptedVerifyCode%>&sign=<%= _RSASignMode%>&w=<%= _W%>&h=<%= _H%>&r=" + Math.random();
    <%= _CallbackName%>("<%= _ClientID%>","<%= _EncryptedMode%>","<%= _EncryptedVerifyCode%>"/*, "<%= _ResponseRSAPublicKey%>"*/, "<%= _ResponseRSASignature%>");
    
    
    
    //Captcha.aspx
    <%@ Page ContentType="image/Png" Language="C#" AutoEventWireup="true" Inherits="Microshaoft.WebSecurity.Captcha" %>
    
    
    
    <?xml version="1.0"?>
    <!-- web.config -->
    <configuration>
        <appSettings>
            <add key="UrlPrefix" value="http://local.tech-talk.net/captcha" />
            <add key="ResponseSharedTripleDESKey" value="123456789100000000000000000000000000000000ABF00A" />
            <add key="ResponseSharedTripleDESIV" value="0123456789ABCDEF" />
            <!-- <RSAKeyValue><Modulus>w7dgn+djOWI7ctEhI066QuQz8oF7Q2vUPQn/ypNkRJv+zFketiIFv0+Dlj9C3QVzZTri69BGA9F92h4ylImjmDqzONYF3Y5SWbiBed1yv57pUIGYSaV/JXBdNCztFYOgVgV/BTGWOYFF/Poc0hx5TGz4Pi98VsNqAHC6Vzjjp20=</Modulus><Exponent>AQAB</Exponent><P>58L7fZmUZ1kaHtXQi+IkWXt5HnoIRTdQOdYhPH7VTopXY8Ls/zJ/blK/JNsGLW/UcP4JQp2+peBo7ocZGfg33w==</P><Q>2C9X9cMmkvJphCW5nnbRObCyA1H+ni2Jrtw2FtjZXTU2YPnUSj4ZMMlTyqWIgDgFXRQl+KZvLPQUvgUGSTg6Mw==</Q><DP>h0E0khVaFYJbixlPTwOYIRy9D7s6LmLckBRWaz6978suuwrcUwa+db0WzkSAc23rNlIbR2RWCepQcrwnOw+wUw==</DP><DQ>Kjg8xmthWitrffpcIN11iP3AFjPqNPwRuouZKKca9EATKadA1WsBQmzfJ2Fioh/OtFnd/IyMg8v7TQzwKFaJzw==</DQ><InverseQ>F7IVGC70VctnvQiUwTeoAOQMIBa4l74IWsfxu2YCuv826L1/ETBbGXn2MgyJibTcLuXKxKZvbYQ8OW5wCvyLvg==</InverseQ><D>cZd8ADLW1xZZdKFGP2zRFEPIlqZp+U6bJzYnfNag6mUztDzBY2pJtaibsddTol4ohIdx7vW5vTuYdMD0EFv2Uz85t6jUi5oogZaKXv2vKSI5DHkWX2SyyEWceIPcf40qDG/xkGIrfL3nH8w6t7SY4ZKx6dn6wmAoFnZwcL2aPo0=</D></RSAKeyValue> -->
            <add key="ResponseRSAPrivateKey" value="&lt;RSAKeyValue&gt;&lt;Modulus&gt;w7dgn+djOWI7ctEhI066QuQz8oF7Q2vUPQn/ypNkRJv+zFketiIFv0+Dlj9C3QVzZTri69BGA9F92h4ylImjmDqzONYF3Y5SWbiBed1yv57pUIGYSaV/JXBdNCztFYOgVgV/BTGWOYFF/Poc0hx5TGz4Pi98VsNqAHC6Vzjjp20=&lt;/Modulus&gt;&lt;Exponent&gt;AQAB&lt;/Exponent&gt;&lt;P&gt;58L7fZmUZ1kaHtXQi+IkWXt5HnoIRTdQOdYhPH7VTopXY8Ls/zJ/blK/JNsGLW/UcP4JQp2+peBo7ocZGfg33w==&lt;/P&gt;&lt;Q&gt;2C9X9cMmkvJphCW5nnbRObCyA1H+ni2Jrtw2FtjZXTU2YPnUSj4ZMMlTyqWIgDgFXRQl+KZvLPQUvgUGSTg6Mw==&lt;/Q&gt;&lt;DP&gt;h0E0khVaFYJbixlPTwOYIRy9D7s6LmLckBRWaz6978suuwrcUwa+db0WzkSAc23rNlIbR2RWCepQcrwnOw+wUw==&lt;/DP&gt;&lt;DQ&gt;Kjg8xmthWitrffpcIN11iP3AFjPqNPwRuouZKKca9EATKadA1WsBQmzfJ2Fioh/OtFnd/IyMg8v7TQzwKFaJzw==&lt;/DQ&gt;&lt;InverseQ&gt;F7IVGC70VctnvQiUwTeoAOQMIBa4l74IWsfxu2YCuv826L1/ETBbGXn2MgyJibTcLuXKxKZvbYQ8OW5wCvyLvg==&lt;/InverseQ&gt;&lt;D&gt;cZd8ADLW1xZZdKFGP2zRFEPIlqZp+U6bJzYnfNag6mUztDzBY2pJtaibsddTol4ohIdx7vW5vTuYdMD0EFv2Uz85t6jUi5oogZaKXv2vKSI5DHkWX2SyyEWceIPcf40qDG/xkGIrfL3nH8w6t7SY4ZKx6dn6wmAoFnZwcL2aPo0=&lt;/D&gt;&lt;/RSAKeyValue&gt;" />
            <add key="InternalTripleDESKey" value="123456789100000000000000000000000000000000ABF00F" />
            <add key="InternalTripleDESIV" value="0123456789ABCDEF" />
            <add key="CharactersText" value="23568ABEFJKNPQRSXdghknpx" />
            <add key="DefaultWidth" value="135" />
            <add key="DefaultHeight" value="35" />
            <add key="DefaultTextLength" value="5" />
        </appSettings>
        <connectionStrings/>
        <system.web>
            <httpModules>
                <add name="ControlsPropertyFilterHttpModule" type="Microshaoft.ControlsPropertyFilterHttpModule, ControlsPropertyFilterHttpModule" />
            </httpModules>
            <!-- 
                Set compilation debug="true" to insert debugging 
                symbols into the compiled page. Because this 
                affects performance, set this value to true only 
                during development.
            -->
            <compilation debug="true">
            </compilation>
            <!--
                The <authentication> section enables configuration 
                of the security authentication mode used by 
                ASP.NET to identify an incoming user. 
            -->
            <authentication mode="Windows" />
            <!--
                The <customErrors> section enables configuration 
                of what to do if/when an unhandled error occurs 
                during the execution of a request. Specifically, 
                it enables developers to configure html error pages 
                to be displayed in place of a error stack trace.
            -->
            <customErrors mode="Off" />
        </system.web>
    </configuration>
    
    
    
    <!-- sample.html -->
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title> new document </title>
        <meta name="generator" content="editplus" />
        <meta name="author" content="" />
        <meta name="keywords" content="" />
        <meta name="description" content="" />
    </head>
    <body>
    <script type="text/javascript" language="javascript">
        function _0hi1(ClientID, EncryptMode, EncryptData/*, RSAPublicKey*/, RSASignature)
        {
            document.getElementById("t1").value = ClientID + ": " + EncryptMode + "; " + EncryptData;
    //        alert("Client ID: " + ClientID);
    //        alert("Encrypt Mode: " + EncryptMode);
    //        alert("Encrypt Data: " + EncryptData);
    //        //alert("Response RSA Public Key: " + RSAPublicKey);
    //        alert("Response RSA Signature: " + RSASignature);
        }
    </script>
    <table border="1">
        <tr>
            <td align="center">
    <script type="text/javascript" language="javascript" src="http://local.tech-talk.net/captcha/captchaplaceholder.aspx?id=1&l=4&h=50&callback=_0hi1&sign=sha1&w=150&refresh=refresh&rsa=%3cRSAKeyValue%3e%3cModulus%3etvWiOBhMJy8t0aZ7futbIm7IPrrTCH4fwl%2f4ut360k5syBFVW%2fWyN50j1aUJmnsp1pPXjt6uGfGNVVOxB9Hku7ppg%2fpNb2xHGau1Yw4EBTpmyR0jq0YjhluxDQkzQzqWZZwiZRluJ5MMT%2fWDgn90aeD%2fadNlir%2fZWsKegpW%2fKbc%3d%3c%2fModulus%3e%3cExponent%3eAQAB%3c%2fExponent%3e%3c%2fRSAKeyValue%3e">
    </script>
    <!-- <script type="text/javascript" language="javascript" src="http://local.tech-talk.net/captcha/captchaplaceholder.aspx?id=1&l=4&h=50&callback=%22;\u0064ocument.write('\u003cscript\u003ealert(
    %22 Encode script XSS Attack%22)\u003c/script\u003e');alert('Plain script Xss Attack callback'); var a = %22%22;//_0123ac&sign=sha1&w=150&refresh=_0hi1&rsa=%3cRSAKeyValue%3e%3cModulus%3etvWiOBhMJy8t0aZ7futbIm7IPrrTCH4fwl%2f4ut360k5syBFVW%2fWyN50j1aUJmnsp1pPXjt6uGfGNVVOxB9Hku7ppg%2fpNb2xHGau1Yw4EBTpmyR0jq0YjhluxDQkzQzqWZZwiZRluJ5MMT%2fWDgn90aeD%2fadNlir%2fZWsKegpW%2fKbc%3d%3c%2fModulus%3e%3cExponent%3eAQAB%3c%2fExponent%3e%3c%2fRSAKeyValue%3e"></script> -->
            </td>
        </tr>
        <tr>
            <td align="center">
    <button onclick= "refresh()">重新获取</button>
            </td>
        </tr>
    </table>
    <br>
    <input id="t1"  type="text" />
    <p>
    <script type="text/javascript" language="javascript">
        function _hi2(ClientID, EncryptMode, EncryptData/*, RSAPublicKey*/, RSASignature)
        {
            document.getElementById("t2").value = ClientID + ": " + EncryptMode + "; " + EncryptData;
    //        alert("Client ID: " + ClientID);
    //        alert("Encrypt Mode: " + EncryptMode);
    //        alert("Encrypt Data: " + EncryptData);
    //        //alert("Response RSA Public Key: " + RSAPublicKey);
    //        alert("Response RSA Signature: " + RSASignature);
        }
    </script>
    <script type="text/javascript" language="javascript" src="http://local.tech-talk.net/captcha/captchaplaceholder.aspx?id=2&sign=sha1&l=4&w=150&h=50&callback=_hi2&sign=md5">
    </script>
    <input id="t2"  type="text" />
    </body>
    </html>
    
    
  • 相关阅读:
    construction of tuples containing 0 or 1 items
    globals()
    __new__
    ubuntu系统安装mysql登陆提示 解决Mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'问题
    ubuntu系统更新源
    Python Web开发问题收集(二)
    linux后台执行./run.py提示python syntax error near unexpected token `('
    linux下执行scrapy的爬虫定时任务
    ubuntu系统中crontab的使用介绍
    JMeter BeanShell断言使用
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/CAPTCHA.html
Copyright © 2020-2023  润新知