在百度中,找到对连接字符串进行加密的函数,一个加密函数,一个解密函数
我想问的是,对于保存在文件中的加密过的字符串,任何人都可以用解密函数进行解密啊
具体是怎么处理的呢?

解决方案 »

  1.   

    这就像保险柜放在那,里面的钱任何人都可以拿走啊。但你没有钥匙你打得开保险柜吗?
    别人就算知道解密算法,没有key也白搭
      

  2.   

    前几天我也在考虑这个问题,因为.Net编译的程序可以反编译,所以如果想搞破坏,很容易啊。
    反编译后,有算法,有密钥。
      

  3.   


            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="encryptString">加密内容</param>
            /// <param name="encryptKey">密匙,长度8位</param>
            /// <returns>加密后的内容</returns>
            public static string Encode(string encryptString, string encryptKey)
            {
                DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
                byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey);
                byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbKey), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Convert.ToBase64String(mStream.ToArray());
            }        /// <summary>
            /// 解密
            /// </summary>
            /// <param name="decryptString">加密的内容</param>
            /// <param name="decryptKey">密匙:内容加密的密匙,长度8位</param>
            /// <returns>解密后的内容</returns>
            public static string Decode(string decryptString, string decryptKey)
            {
                byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
                byte[] inputByteArray = Convert.FromBase64String(decryptString);
                DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();
                MemoryStream mStream = new MemoryStream();
                CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbKey), CryptoStreamMode.Write);
                cStream.Write(inputByteArray, 0, inputByteArray.Length);
                cStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(mStream.ToArray());
            } 
      

  4.   

    LS说的是用户登陆之类的验证吧,像12306那样的?那就建个https证书好了但是那跟连接字符串没有关系。也是在服务端CLR中执行的,运行时Net本身就已经把配置文件中的连接字符串加密了
    但是如果你说你的代码文件都被人窃取了,那就是另外一回事了
      

  5.   


    人家说的连接字符串,连数据库(你看他历史发帖记录),你怎么联系到http,想象力太丰富了吧。
      

  6.   


    不要再误导lz了,lz已经概念不清了。
      

  7.   

    http://www.cnblogs.com/shuzehui1984713/archive/2010/10/14/1851770.html
      

  8.   

    文件,是客户端的文件啊,与winform安装程序同一个文件夹
    文件中的密文是以密文形式存的,但是程序的源代码中有解密函数啊,因为解密后才能用嘛
      

  9.   


    很简单lz,你不会写程序,什么都不懂都没有关系,鼠标键盘会用就好办。
    你可以下载一个叫sniffer pro的软件,然后打开它,开始监听你的网络,运行你的程序,试图和服务器连接。连上即可。停止sniffer pro的监听。然后在sniffer pro抓下来的数据中搜索,看看有没有密码,如果有,那就行了。你明白了吧,和你什么配置文件、exe加密之类的事情毫不搭界。你再加密都是徒劳的。
      

  10.   

    在.net里好像有内置的加密,挺不错的,你可以看看。
      

  11.   

    没有绝对安全的加密,要么你就用硬件做定时动态密码,双方的硬件密匙通过TCP做动态口令传输,相对安全一点
      

  12.   

    之前,用Delphi写程序时。早期,是将连接字符串保存在程序中,曾经试过,用UE打开程序可以直接搜到连接字符串,加壳后就搜不到了,但能脱壳。后来,为了安全及灵活,就将连接字符串保存到文件中(目前仍有小点的软件,用INI文件明文保存服务器名、用户名、密码的),怕不安全,就用加密方式存储。如果用Net写,EXE文件可以直接反编译(我之前试过,源代码基本完整),那样,解密函数直接可以复制出来,稍改一下,就可以解密连接字符串了。
    不知道有没有什么办法可以防止反编译。用混淆效果也不太好。
      

  13.   

    还有啥稍微好点的办法不啊,我又不会WCF,中间层不会整。
    软件做好了,都不敢发布!!
      

  14.   

    这个是RSA私钥加密,公钥解密的问题。
    .net对于非对称式加密,只支持公钥加密,私钥解密;
    私钥加密、公钥解密的算法,要自己写才行。