sql server中的查询字符串加密

时间:2010-01-13 02:28:24

标签: .net sql sql-server

我需要创建一个令牌以显示在查询字符串上,该查询字符串可以传递到网页并进行解码,以便在数据库视图中查找记录。

令牌不应该受到暴力增加值类型攻击的影响。

数据库中的查看记录唯一地定义为两个密钥的组合。

此令牌的生成需要在数据库中按需发生。该数据库由另一个系统直接访问,该系统利用视图中的数据生成电子邮件。

我已经尝试基于这两个键生成一个sha1哈希,然后url safe base64编码结果,但由于它是单向操作,因此在Web端的查找速度慢得令人无法接受。

我认为对称密钥加密是合适的,只要加密发生在数据库中,并且解密发生在网站上,在查找之前。

在这个阶段,我倾向于构建一个CLR函数来填充视图中生成的列。

2 个答案:

答案 0 :(得分:1)

我最终编写了一个CLR函数,该函数使用三重DES加密包含我需要的密钥的盐化连接字符串。此函数用于视图上的计算列。

我使用此页面作为三重DES代码的基础: http://www.dotnetspark.com/kb/1279-triple-des-encryption-and-decryption-using.aspx

虽然在大多数情况下需要的工作量比我想象的要多,但它的性能和安全性都很高。

答案 1 :(得分:0)

因此,您希望数据库生成“令牌”,将该值传递给应用程序(Web / Internet),稍后用户将返回该令牌,数据库将基本上将其用作查找/主键值?并且您希望生成的值是这样的:黑客[我们的朋友Mallory]不能(a)猜测特定帐户的令牌和/或(b)猜测帐户的任何有效令牌? / p>

为什么不把它作为一个随机数?一个4字节的值可以获得40亿个值,8个字节可以获得4 PB的值(2 ^ 64),并且它会不断上升。不可否认,你有一个古老的问题,即生成一个真正随机的数字(Maybe try these guys?),你需要衡量可能的令牌与有效令牌的比率,以及蛮力攻击需要多长时间来猜测它们,但是你任何安全措施都能得到它。

我的问题是,如果你传出的数据只是一个查找键,为什么要用哈希和加密呢?