.net sqlconnection 连接字符串如何加密?

开发c/s架构的.net程序应该如何对数据库连接字符串加密?有人说放在appconfig里,我试过,程序安装到客户机上,可以直接打开appconfig文件看到里面的密码有... 开发c/s架构的.net程序应该如何对数据库连接字符串加密?

有人说放在appconfig里,我试过,程序安装到客户机上,可以直接打开appconfig文件看到里面的密码
有人说放在程序代码中,可以在网上随便找一个.net反编译程序都能看到源代码,看到密码和加密过程
有人说封装在一个dll文件里,这种跟上面一样可以被反编译
那到底怎样才能做到安全呢?
展开
 我来答
Sxzy灬丨小柒
2014-11-13 · TA获得超过623个赞
知道小有建树答主
回答量:1223
采纳率:50%
帮助的人:281万
展开全部
 #region AES加密
        public static string Encrypt(string toEncrypt)
        {
            byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12345678901234567890123456789012");
            byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
            RijndaelManaged rDel = new RijndaelManaged();//using System.Security.Cryptography;    
            rDel.Key = keyArray;
            rDel.Mode = CipherMode.ECB;//using System.Security.Cryptography;    
            rDel.Padding = PaddingMode.PKCS7;//using System.Security.Cryptography;   
            ICryptoTransform cTransform = rDel.CreateEncryptor();//using System.Security.Cryptography;    
            byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
            return Convert.ToBase64String(resultArray, 0, resultArray.Length);
        }
        #endregion AES加密
 
        #region AES解密
        public static string Decrypt(string toDecrypt)
        {
            try
            {
                byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12345678901234567890123456789012");
                byte[] toEncryptArray = Convert.FromBase64String(toDecrypt);
                RijndaelManaged rDel = new RijndaelManaged();
                rDel.Key = keyArray;
                rDel.Mode = CipherMode.ECB;
                rDel.Padding = PaddingMode.PKCS7;
                ICryptoTransform cTransform = rDel.CreateDecryptor();
                byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
                return UTF8Encoding.UTF8.GetString(resultArray);
            }
            catch (Exception ex)
            {
                MessageBox.Show("无效字符串!!!");
                return "";
            }
        }
        #endregion AES解密
更多追问追答
追问
这是加解密过程,若要加密,必须传递一个字符串吧?别人反编译后看到你加密前的字符串和这个加密码过程,不一样可以得到密码吗?
比如调用过程是不是这样写: string PD= Encrypt('123456');
那人家通过反编译看到123456和Encrypt()过程,一样可以得到密码,不是吗?
追答

你理解错了.比如你的连接串是这个"server=.;database=testbase;uid=sa,pwd=123";

加密后是"nptSRd0vvvGbM4MWdZskD1FCPLGWth+kH1DMDb/jBF6b+MMsUPaDw+udEgJlBvTz";

你把这个加密后的存在webconfig中.

然后你程序里.

string jiemi Decrypt("加密后的");

 

什么程序都有安全隐患.这只是最基本的加密而已.高端的安全机制比这高级的多.硬件手段网络手段等等.话说回来,真正的高手破解咱们这服务器就几分钟,你网站根目录下有appconfig就是找死..关键在于人家懒得破.金山专注杀毒十几年,至少安全机制比你的高深N倍吧.不也1秒被攻破.

超大蒲公英
2014-11-13 · TA获得超过741个赞
知道小有建树答主
回答量:758
采纳率:75%
帮助的人:744万
展开全部
没有决对的安全。
可以把连接串做成程序集的资源。

数据库是在客户端吗,那可以直接绕过你的程序,用数据库工具连上了(windows验证方式)。
如果是在服务器上,那你就不要让程序直接库,而是写一个中间通讯程序。
更多追问追答
追问
访问SQL服务器,不是本地数据库文件。
如何才能登录SQL服务器而不出现明码?
可以帮忙解释一下中间通讯程序吗?
追答
在你的sql服务器上,可以建一个web service (或其它方式),你的客户端程序只与web service交互。web service在服务器上与数据库交互。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式