我要求在我们的数据库中加密客户的会员编号。好吧,我们正在使用MS SQL Server,我想我使用encryptbypassphrase,更改写入该字段加密的每个地方以及读取它的每个地方进行解密等。
除了......数据库中有一些地方用于链接多个记录。我想没有问题,我只是改变来自"加入blahblah on a.member_number = b.member_number",加入"加入blahblah on a.member_number_encrypted = b.member_number_encrypted"。但这不起作用,因为我发现如果我加密相同的值两次,我就不会得到相同的加密值。我想它会在那里添加一些盐或其他东西。而且我不想说#34;加入blahblah在decryptbypassphrase(@pw,a.member_number_encrypted)= decryptbypassphrase(@pw,b.member_number_encrypted),因为这会将索引查找转换为完整文件搜索。我认为必须对更大的加密值进行索引会很难看,但是......
那么......是否有某种方法可以强制加密passpassphrase始终将相同的输入加密到同一输出?或者这是否意味着在大多数情况下加入加密字段根本不可行?
或者我错过了什么?
答案 0 :(得分:0)
您要找的是deterministic encryption。 您可以通过使用明文散列作为IV来实现确定性加密,因此,每次加密给定的明文时,您将获得相同的密文。请参阅this article以供参考。
如果您正在使用/可以使用MS SQL Server 2016,则应该查看Always Encrypted功能。取决于您要对数据执行的操作。 Always Encrypted将使您的任务更容易,因为它支持确定性加密。很少有链接可以帮助你。
Getting Started with Always Encrypted
This feature will make it easier to test Always Encrypted without writing an app
Configure Always Encrypted using SQL Server Management Studio
I have briefly explained the security guarantee provided by Always Encrypted here