有一系统,多个客户端向服务器端发送数据,由于数据保密,需要在客户端进行加密后进行传输,然后再在服务器端解密后存入数据库。   
          现在有如下问题:   
      
          2)如果使用B/S结构,不知道如何实现客户端加密较好,希望各位给予帮助!   
  先谢了。 我对这一方面了解的很少,请说的形象一点谢谢。

解决方案 »

  1.   

    http://webuc.net/ddf3/archive/2006/06/06/7092.aspxMD5加密
      

  2.   

    在.net类库里面有很多加密的类,如MD5等等。你可以在using System.Web.Security; 命名空间里找到。
      

  3.   


    除了 MD5还有其他的吗?因为MD5不可逆,所以就不考虑了
      

  4.   

    DES
      

  5.   

    在网上查了资料  像des  ras之类的加密应该就可以
      

  6.   

    我这有个加密的帮助,你试试看看
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;using System.Text;
    using System.IO;
    using System.Data;
    using System.Diagnostics;
    using System.Security;
    using System.Security.Cryptography;namespace Encrypt
    {
        /// <summary>   
        /// 类名:HashEncrypt   
        /// 作用:对传入的字符串进行Hash运算,返回通过Hash算法加密过的字串。   
        /// 属性:[无]   
        /// 构造函数额参数:   
        /// IsReturnNum:是否返回为加密后字符的Byte代码   
        /// IsCaseSensitive:是否区分大小写。   
        /// 方法:此类提供MD5,SHA1,SHA256,SHA512等四种算法,加密字串的长度依次增大。   
        /// </summary>   
        public class HashEncrypt
        {
            //private string strIN;   
            private bool isReturnNum;
            private bool isCaseSensitive;        /// <summary>   
            /// 构造函数   
            /// </summary>   
            /// <param name="IsCaseSensitive">是否区分大小写。</param>   
            /// <param name="IsReturnNum">是否返回为加密后字符的Byte代码。</param>   
            public HashEncrypt(bool IsCaseSensitive, bool IsReturnNum)
            {
                this.isReturnNum = IsReturnNum;
                this.isCaseSensitive = IsCaseSensitive;
            }        /// <summary>   
            /// 检测是否区分大小写   
            /// </summary>   
            /// <param name="strIN">字符串</param>   
            /// <returns></returns>   
            private string getstrIN(string strIN)
            {
                //string strIN = strIN;   
                if (strIN.Length == 0)
                {
                    strIN = "~NULL~";
                }
                if (isCaseSensitive == false)   //不区分大小写   
                {
                    strIN = strIN.ToUpper();
                }
                return strIN;
            }        /// <summary>
            /// MD5加密与解密
            /// </summary>
            /// <param name="strIN">待加密或解密的字符串</param>
            /// <returns>加密或解密后的字符串</returns>
            public string MD5Encrypt(string strIN)
            {
                //string strIN = getstrIN(strIN);   
                byte[] tmpByte;
                MD5 md5 = new MD5CryptoServiceProvider();
                tmpByte = md5.ComputeHash(GetKeyByteArray(getstrIN(strIN)));
                md5.Clear();            return GetStringValue(tmpByte);        }        /// <summary>
            /// SHA1加密与解密
            /// </summary>
            /// <param name="strIN">待加密或解密的字符串</param>
            /// <returns>加密或解密后的字符串</returns>
            public string SHA1Encrypt(string strIN)
            {
                //string strIN = getstrIN(strIN);   
                byte[] tmpByte;
                SHA1 sha1 = new SHA1CryptoServiceProvider();            tmpByte = sha1.ComputeHash(GetKeyByteArray(strIN));
                sha1.Clear();            return GetStringValue(tmpByte);        }        /// <summary>
            /// SHA256加密与解密
            /// </summary>
            /// <param name="strIN">待加密或解密的字符串</param>
            /// <returns>加密或解密后的字符串</returns>
            public string SHA256Encrypt(string strIN)
            {
                //string strIN = getstrIN(strIN);   
                byte[] tmpByte;
                SHA256 sha256 = new SHA256Managed();            tmpByte = sha256.ComputeHash(GetKeyByteArray(strIN));
                sha256.Clear();            return GetStringValue(tmpByte);        }        /// <summary>
            /// SHA512加密与解密
            /// </summary>
            /// <param name="strIN">待加密或解密的字符串</param>
            /// <returns>加密或解密后的字符串</returns>
            public string SHA512Encrypt(string strIN)
            {
                //string strIN = getstrIN(strIN);   
                byte[] tmpByte;
                SHA512 sha512 = new SHA512Managed();            tmpByte = sha512.ComputeHash(GetKeyByteArray(strIN));
                sha512.Clear();            return GetStringValue(tmpByte);        }        /// <summary>   
            /// 使用DES加密   
            /// </summary>   
            /// <param name="originalValue">待加密的字符串</param>   
            /// <param name="key">密钥(最大长度8)</param>   
            /// <param name="IV">初始化向量(最大长度8)</param>   
            /// <returns>加密后的字符串</returns>   
            public string DESEncrypt(string originalValue, string key, string IV)
            {
                //将key和IV处理成8个字符   
                key += "12345678";
                IV += "12345678";
                key = key.Substring(0, 8);
                IV = IV.Substring(0, 8);            SymmetricAlgorithm sa;
                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
                byte[] byt;            sa = new DESCryptoServiceProvider();
                sa.Key = Encoding.UTF8.GetBytes(key);
                sa.IV = Encoding.UTF8.GetBytes(IV);
                ct = sa.CreateEncryptor();            byt = Encoding.UTF8.GetBytes(originalValue);            ms = new MemoryStream();
                cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt, 0, byt.Length);
                cs.FlushFinalBlock();            cs.Close();            return Convert.ToBase64String(ms.ToArray());        }        /// <summary>   
            /// 使用DES加密   
            /// </summary>   
            /// <param name="originalValue">待加密的字符串</param>   
            /// <param name="key">密钥(最大长度8)</param>   
            /// <returns>加密后的字符串</returns>   
            public string DESEncrypt(string originalValue, string key)
            {
                return DESEncrypt(originalValue, key, key);
            }        /// <summary>   
            /// 使用DES解密   
            /// </summary>   
            /// <param name="encryptedValue">待解密的字符串</param>   
            /// <param name="key">密钥(最大长度8)</param>   
            /// <param name="IV">m初始化向量(最大长度8)</param>   
            /// <returns>解密后的字符串</returns>   
            public string DESDecrypt(string encryptedValue, string key, string IV)
            {
                //将key和IV处理成8个字符   
                key += "12345678";
                IV += "12345678";
                key = key.Substring(0, 8);
                IV = IV.Substring(0, 8);            SymmetricAlgorithm sa;
                ICryptoTransform ct;
                MemoryStream ms;
                CryptoStream cs;
                byte[] byt;            sa = new DESCryptoServiceProvider();
                sa.Key = Encoding.UTF8.GetBytes(key);
                sa.IV = Encoding.UTF8.GetBytes(IV);
                ct = sa.CreateDecryptor();            byt = Convert.FromBase64String(encryptedValue);            ms = new MemoryStream();
                cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
                cs.Write(byt, 0, byt.Length);
                cs.FlushFinalBlock();            cs.Close();            return Encoding.UTF8.GetString(ms.ToArray());        }        /// <summary>   
            /// 使用DES解密   
            /// </summary>   
            /// <param name="encryptedValue">待解密的字符串</param>   
            /// <param name="key">密钥(最大长度8)</param>   
            /// <returns>解密后的字符串</returns>   
            public string DESDecrypt(string encryptedValue, string key)
            {
                return DESDecrypt(encryptedValue, key, key);
            }        /// <summary>   
            /// 将二进制数组转为字符串   
            /// </summary>   
            /// <param name="Byte">二进制数组</param>   
            /// <returns></returns>   
            private string GetStringValue(byte[] Byte)
            {
                string tmpString = "";            if (this.isReturnNum == false)
                {
                    ASCIIEncoding Asc = new ASCIIEncoding();
                    tmpString = Asc.GetString(Byte);
                }
                else
                {
                    int iCounter;                for (iCounter = 0; iCounter < Byte.Length; iCounter++)
                    {
                        tmpString = tmpString + Byte[iCounter].ToString();
                    }            }            return tmpString;
            }        /// <summary>   
            /// 返回字符串的二进制数组   
            /// </summary>   
            /// <param name="strKey">字符串</param>   
            /// <returns></returns>   
            private byte[] GetKeyByteArray(string strKey)
            {            ASCIIEncoding Asc = new ASCIIEncoding();            int tmpStrLen = strKey.Length;            byte[] tmpByte = new byte[tmpStrLen - 1];            tmpByte = Asc.GetBytes(strKey);            return tmpByte;        }
        }
    }