【问题标题】:Encrypting / Decrypting a passed value in SQL Server [closed]在 SQL Server 中加密/解密传递的值 [关闭]
【发布时间】:2014-07-17 20:19:48
【问题描述】:

我有以下场景...

供应商向客户发送电子邮件。电子邮件底部是指向我负责的网页的链接,即托管。我们需要通过网页链接传递用户的电子邮件地址,但我们希望它被加密。然后,当我们收到请求时,我们需要能够对它进行解密,以便我们可以从中提取电子邮件。

我希望供应商能够通过 SQL Server(生成链接的位置)对其进行加密,并且我们还希望使用 SQL Server 对其进行解密。

我在加密/解密方面没有、没有、零经验,需要在接下来的 6 小时内设计解决方案……!!!

我看到了有关加密整个列的信息,但我只需要能够加密/解密单个字符串。

有什么想法吗?更好的方法?

谢谢, G

【问题讨论】:

    标签: sql-server encryption encryption-symmetric encryption-asymmetric


    【解决方案1】:

    您可以在 SQL Server 中使用EncryptByPassPhraseDecryptByPassPhrase

    select EncryptByPassPhrase('key', 'abc' );
    
    select convert(varchar(100),
       DecryptByPassPhrase('key', 0x0100000001E5B67F919CCC4B8EA10E97FC50764BF6B30EC4347C4E54));
    

    【讨论】:

    • 这对我有用!我不确定它是否是最安全的,但它比我们的位置早了几光年!
    【解决方案2】:

    我会在您的用户电子邮件表中创建一个类型为 UNIQUEIDENTIFIER 的新列,并将其默认值设置为 NEWID(),以便它创建一个新的 GUID(例如:400c4d0d-cd5a-42fd-8660-15250e27c247)创建记录时。这是假设您在此表中创建每封电子邮件的新记录。

    SQL 来改变你的源表:

    ALTER TABLE [YOUR_TABLE] ADD
        UniqueEmailId uniqueidentifier NOT NULL 
        CONSTRAINT DF_YOUR_TABLE_UniqueEmailId DEFAULT newid()
    

    然后您可以使用在超链接中创建的值,如下所示:

    www.yoursite.com/emailid=400c4d0d-cd5a-42fd-8660-15250e27c247
    

    然后,一旦点击它,您只需查找与该唯一标识符相关的用户/电子邮件并提供您的页面。

    这将规避传递您必须在超链接中加密/解密的敏感信息的要求。

    【讨论】:

      【解决方案3】:

      我不会为此任务使用加密。您加密的任何内容都可能被某人解密。更好的解决方案是生成一个随机代码并将其分配给数据库中的电子邮件地址。然后根据该代码进行查找。代码可以像使用 GUID 一样简单。

      In C#: Guid.NewGuid()
      
      In SQL Server: NEWID()
      

      【讨论】:

      • 这是一个原始想法,但不幸的是,供应商将是创建 GUID 的人,但我们无法与数据库中的记录相关联。此外,目前无法保证该电子邮件甚至存在于我们的数据库中。我们需要能够从加密/哈希中提取电子邮件才能添加它。
      • 供应商必须从你那里得到一个代码,你为什么不能在那时创建电子邮件/代码匹配?
      猜你喜欢
      • 2011-04-29
      • 2011-01-10
      • 2011-09-23
      • 1970-01-01
      • 2021-10-05
      • 2015-08-26
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多