你的位置:首页 > 软件开发 > ASP.net > clickonce部署的 winform保护连接字符串进行加密的一个简单方案 可有效防止被反编译暴露数据库地址

clickonce部署的 winform保护连接字符串进行加密的一个简单方案 可有效防止被反编译暴露数据库地址

发布时间:2016-03-25 16:00:08
手里在做的一个自用的多用户进销存项目,碰到了以下使用场景:1、为了每个店铺/仓库的用户都能及时获得更新,软件采用了clickOnce部署方式,这就导致了只要知道发布地址,任何人都可以进行下载了。2、现在只购买了一个SQL数据库空间,并没有购买虚拟主机之类的web空间(部署用的空间 ...

clickonce部署的 winform保护连接字符串进行加密的一个简单方案 可有效防止被反编译暴露数据库地址

手里在做的一个自用的多用户进销存项目,碰到了以下使用场景:

1、为了每个店铺/仓库的用户都能及时获得更新,软件采用了clickOnce部署方式,这就导致了只要知道发布地址,任何人都可以进行下载了。

2、现在只购买了一个SQL数据库空间,并没有购买虚拟主机之类的web空间(部署用的空间是用3322解析到自己的电脑上的),所以也没办法采用websevices来进行中间层操作了,只能用客户端直接连接。

客户端连接数据库最大的隐患就是如果被反编译的话会直接暴露数据库地址,非常不安全,通常情况下采用的加密和解密都需要写到程序里,如果被反编译的话也会一并暴露,达不到加密目的。

项目中我采用了一个取巧的方法:利用文件的数字签名作为密钥来进行加密,具体的做法就是:

1、在系统指定位置放一个KEY文件,软件读取该文件的MD5值作为密钥,对连接字符串进行AES/DES加密,将加密后的字符串放到软件的配置文件中。

2、把该KEY文件会直接发放给使用的用户(内部系统,使用人员可控),放到指定的系统路径中,软件读取该文件的MD5值作为密钥然后进行DES/AES解密。

好处就是:即使程序被反编译,看到的也是加密后的字符串,拿不到key文件就无法进行解密。

而key文件则是通过另外的方式进行分发,并不随软件一起发布,即使下载了程序,也还是拿不到key文件。

 

思路有了 实现起来也是非常的简单:

第一步:准备一个KEY文件,可以是任意文件,一张图片,一个文档,或者一首歌曲,注意:该文件一旦被作为KEY文件将不能在有任何修改,否则MD5值就改变了,也就无法再解密。

第二部:读取改文件的MD5值,核心代码:(因为加密密钥需要是8位,所以任意截取结果中的8位即可)

FileStream file = new FileStream(“filePath“, System.IO.FileMode.Open); //filepath为你的key文件路径,建议放到C盘中        MD5 md5 = new MD5CryptoServiceProvider();        byte[] retVal = md5.ComputeHash(file);        file.Close();        StringBuilder sb = new StringBuilder();        for (int i = 0; i < retVal.Length; i++)        {          sb.Append(retVal[i].ToString("x2"));        }        return sb.ToString().Subget='_blank'>string(10, 8);

原标题:clickonce部署的 winform保护连接字符串进行加密的一个简单方案 可有效防止被反编译暴露数据库地址

关键词:数据库

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。