请教比较安全的数据库字段加密办法

问题描述

stringjmsql=(newMD5()).MD5Decrypt(ConfigurationManager.ConnectionStrings["SQLConnString"].ConnectionString,"**????#?");

我目前使用app.config,在里面把连接字段用md5加密了,然后在程序里使用此方法获取。但程序如果用Reflector打开,还是可以破解获取数据库账号和密码,有没有好一点的办法来解决安全问题?本人比较菜,也百度了好久,网上说的解决办法有些看不大懂。

解决方案

解决方案二:
会知道使用Reflector的人,你怎么加密都可以破解,因为C#语言本身是不加密的,只能想办法提高解密难度.直接放弃存储连接串,改用联机获取的方式,联机获取时要提供用于登录系统的用户名和密码,这样数据库连接密码可以经常改变,也可以记录下谁调用了获取连接串的方法,这需要另外编写一个服务端(如WEBSERVICE).
解决方案三:
引用1楼tcmakebest的回复:

会知道使用Reflector的人,你怎么加密都可以破解,因为C#语言本身是不加密的,只能想办法提高解密难度.直接放弃存储连接串,改用联机获取的方式,联机获取时要提供用于登录系统的用户名和密码,这样数据库连接密码可以经常改变,也可以记录下谁调用了获取连接串的方法,这需要另外编写一个服务端(如WEBSERVICE).

如何把数据库连接字符串放在webService里做常量,然后在winform里读取这个字符串可行不?这样是否安全?
解决方案四:
如果你都准备用webservice了,那么你已无需远程连接数据库了。
解决方案五:
不管你加密不加密,我们采用的方法与游戏破解类似,是在内存中获取真实的数据库连接串。因为你的程序最终总是要拿出真实的字符串去执行的。实际上,所谓加密应该是一个系统工程。最基本的做法就是放到一个局域网里,而这个局域网只有个别人能够触碰,并且保证经常更换防护方法(后者比前者更重要)。也就是说,从性价比上,非技术因素比技术重要得多得多。
解决方案六:
引用3楼ajianchina的回复:

如果你都准备用webservice了,那么你已无需远程连接数据库了。

是这样的。lz的思维,是一种“自底向上、堆砌”式的慢热的思维方式。因此即使别人跟他说webservice之类的话,它也是理解为用来传送一个数据库连接串而已,思维上离不开这个,要从根本上理解别的逻辑就好像割肉剜心一样难受,就会把相同的名词儿理解得黑白颠倒。其实如果能听进去不同的设计逻辑,一切就很自然。成本也低。比如说你老婆应该算是通常最能替你保守秘密的一个人了吧?但是如果你发现她跟旧情人还有约会(还好我没有发现过),这就难说了。所以不要相信虚伪的规则,任何人的思考都是有局限的,合适自己才最好。
解决方案七:
引用3楼ajianchina的回复:

如果你都准备用webservice了,那么你已无需远程连接数据库了。

主要是程序差不多算完工了,最后发现连接字符串放在app.config里不安全,所以想找个偷懒的办法解决安全问题。至于webservice也是今天上午才百度了解的,惭愧,自己接触C#才一个月的时间。
解决方案八:
引用6楼bh5768的回复:

Quote: 引用3楼ajianchina的回复:
如果你都准备用webservice了,那么你已无需远程连接数据库了。

主要是程序差不多算完工了,最后发现连接字符串放在app.config里不安全,所以想找个偷懒的办法解决安全问题。至于webservice也是今天上午才百度了解的,惭愧,自己接触C#才一个月的时间。

今天偷点懒,以后可能有得麻烦了,4Lsp大神的意思你看了应该也明白,直白点讲,真不想让别人见到的宝贝就该放自己家里,若是揣兜里出门,随你藏的如何好,要想偷终究有办法,而且有好多办法,问题是被偷的结果会怎么样,先不谈技术性的问题,我给你举个例子,你的数据库连接账户可能都是用的一个登陆账户,我不是说的你软件业务上的账户,可能你们给不同的用户使用,但不想让各用户间相互知道对方的业务资料,但通过你的数据库账户登录进去了就可以查询了,全部一目了然,他也不会给你搞什么破坏,但这种结果有时所导致的损失是难以挽回的,所以你自己再好好想想,权衡一下利弊。
解决方案九:
连接字符串用c语言封进dll中会安全些吧?临时想到,没有验证
解决方案十:
你不要老想着加什么密。如果别人连你服务器都进不了,如何破解?不如你想想法子让服务器更安全更简单。
解决方案十一:
引用9楼u011710947的回复:

你不要老想着加什么密。如果别人连你服务器都进不了,如何破解?不如你想想法子让服务器更安全更简单。

是这样的吗?
解决方案十二:
引用10楼u010085567的回复:

Quote: 引用9楼u011710947的回复:
你不要老想着加什么密。如果别人连你服务器都进不了,如何破解?不如你想想法子让服务器更安全更简单。

是这样的吗?

任何可逆加密都可以破解,与其把心思放在加密上,不如多花点时间防范别人入侵你的服务器。
解决方案十三:
引用6楼bh5768的回复:

主要是程序差不多算完工了,最后发现连接字符串放在app.config里不安全,所以想找个偷懒的办法解决安全问题。至于webservice也是今天上午才百度了解的,惭愧,自己接触C#才一个月的时间。

.net确实提供了配置文件的加密功能,请看这里的说明https://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx但就象sp1234说的,连接字符串无论怎么加密,在客户端都有可能被读取,因为在运行时ADO.NET是需要明文的连接字符串,因此在内存中一定存有解密后的版本。别不相信,我就干过这事,我曾经用CheatEngine读取过某款软件的连接字符串,当然那是纯属好奇,玩玩而已。所以要避免连接字符串或其它敏感数据被非法获取,最好的办法是不要放到客户端,这就涉及到你的系统的架构问题。如果不把连接字符串放到客户端,就意味着所有对数据库的操作都要在服务端完成,这里至少有两个问题,一是你有没有服务端,二是怎么改变现有的数据访问模式。我想,这样的改变对于你已经开发好的系统来说是颠覆性的,要怎么做,还得自己权衡。
解决方案十四:
楼主只不过是突然想到要有加密的需求,但并不知道什么是加密!我目前使用app.config,在里面把连接字段用md5加密了但却不知道MD5并非加密,如果只是这样肤浅的去硬做,结果必然的自欺欺人的(自以为保护的秘密,结果却漏洞百出)
解决方案十五:
webservice放在虚拟主机上能用吗?还是必须要有虚拟目录?
解决方案:
引用12楼effun的回复:

Quote: 引用6楼bh5768的回复:
主要是程序差不多算完工了,最后发现连接字符串放在app.config里不安全,所以想找个偷懒的办法解决安全问题。至于webservice也是今天上午才百度了解的,惭愧,自己接触C#才一个月的时间。

.net确实提供了配置文件的加密功能,请看这里的说明https://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx但就象sp1234说的,连接字符串无论怎么加密,在客户端都有可能被读取,因为在运行时ADO.NET是需要明文的连接字符串,因此在内存中一定存有解密后的版本。别不相信,我就干过这事,我曾经用CheatEngine读取过某款软件的连接字符串,当然那是纯属好奇,玩玩而已。所以要避免连接字符串或其它敏感数据被非法获取,最好的办法是不要放到客户端,这就涉及到你的系统的架构问题。如果不把连接字符串放到客户端,就意味着所有对数据库的操作都要在服务端完成,这里至少有两个问题,一是你有没有服务端,二是怎么改变现有的数据访问模式。我想,这样的改变对于你已经开发好的系统来说是颠覆性的,要怎么做,还得自己权衡。

现在在做升级版,数据处理放在webservice里。但有个疑问,webservice必须放在虚拟目录里才可以允许吗?

时间: 2024-09-20 08:44:14

请教比较安全的数据库字段加密办法的相关文章

MySQL字段加密和解密

MySQL字段加密和解密 1.加密:aes_encrypt('admin','key') 解密:aes_decrypt(password,'key') 2.双向加密 通过密钥去加密,解密的时候的只有知道这个密钥的人来解密 加密:encode() 解密:decode() eg:encode('123456' 'adfdgfdhggfh'); decode(password,'adfdgfdhggfh'); 3.PASSWORD('123456') password加密是不可逆转的 4.MD5('1

hibernate注解实体类对应数据库字段,出了问题?请教

问题描述 hibernate注解实体类对应数据库字段,出了问题?请教 我在用注解写对应数据库的映射文件时候 搞了个单元测试 结果就报了异常 : org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'commonDao': Autowiring of fields failed; nested exception is org.springframework.beans.fac

小弟继续请教那个DATATABLE向数据库总提交问题,麻烦各位朋友帮助,谢谢!!

问题描述 小弟继续请教那个DATATABLE向数据库总提交问题系统(VS2003,语言是VB.NET,数据库是SQL2005EXPRESS)最麻烦的是DATAROW中保存的是"○"和"×",要翻译成"1"和"0"保存入数据库,麻烦死了小弟昨天又通宵了,苦啊! 解决方案 解决方案二:http://topic.csdn.net/u/20080414/01/17537ee5-c53c-432b-b6da-d5f32e05c536.h

数据库同步-请教问题:异地数据库访问问题

问题描述 请教问题:异地数据库访问问题 请教问题,某省各区县都部署有自己的系统,系统是BS的,应用服务器与数据库服务器是分开的,而且只有web应用服务器是对外开放的.现在省里想直接连接各区县的数据库,进行业务信息的查询.有没有什么中介件或技术可以实现,省里的服务器可以访问区县的数据? 或者有什么方式可以让区县的数据实时或定时的同步汇总到省里的服务器中? 解决方案 百度............... 解决方案二: 简单点的办法就是代理,要么就是人为写代理server 解决方案三: 你数据库服务器能

6.(Mysql数据管理相关)连接MYSQL,修改密码,增加新用户,数据库相关命令,表操作相关命令,数据相关命令,数据库sql导入和导出,备份数据库,查看不到mysql数据库的解决办法

 mysql安装完之后,登陆后发现只有两个数据库:mysql>show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | test               | +--------------------+ ,mysql> use mysql ERROR 1044 (42000): Access denied for user''

详解ios中的SQL数据库文件加密 (使用sqlcipher)_IOS

今天本想写一片 GAE+goAgent+SwitchySharp 的指南的!但是突然翻出了前段时间写的关于iOS中的SQL数据库文件加密的代码,于是乎决定今天就先讲讲这个!- 那么goAgent将放在周末,后续的文章中除了文件加密,还有传输数据加密,感兴趣的童鞋 敬请留意. 言归正传,sql的文件加密,我们首先要用到一个库,它就是大名鼎鼎的Sqlcipher,  奉上连接:http://sqlcipher.NET,在ios里 我们需要看的文档是这一篇http://sqlcipher.Net/io

数据库字符加密与读取

问题描述 一.数据库字段的值如何加密:如ID(INT类型)Key(Varchar类型)0*****(加密后的字符)1同上2同上............二.如何用C#读取正确的Key的值?? 解决方案 解决方案二:可以在插入时,用各种方法加密后,插入到数据库中加密的方法有多种,可以是自己写的,也可以是用系统提供的方法加密常用的有md5和sha1 MD5相关类:System.Security.Cryptography.MD5System.Security.Cryptography.MD5Crypto

数据库字段复用的基本原理与示例

  一.逻辑代数基础: 1,数字用二进制表示,所有可能出现的数只有0和1两个. 2,基本运算只有"与"."或"."非"三种. 与运算定义为:(用 & 表示与运算) 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1 可以简单理解为:只要有一个0,结果就是0,和乘法类似. 或运算定义为:(用 表示与运算) 0 0 = 0 0 1 = 1 1 0 = 1 1 1 = 1 可以简单理解

英文的服务器不支持中文及中文数据库的解决办法

英文的服务器不支持中文及中文数据库的解决办法 方法一: 在翻阅了微软NGWS文档后发现在文档的常见问题部分有提到要添加一个config.web文件到 web目录下,试了一下,中文显示果然OK了. 方法如下: 建立一个文件config.web,内容如下,放在WEB目录下 <configuration> <globalization requestencoding="utf-8" responseencoding="utf-8" /> </