【问题标题】:SQL SERVER 2008 version of Informix ENCRYPT_TDESSQL SERVER 2008 版本的 Informix ENCRYPT_TDES
【发布时间】:2012-01-06 14:52:08
【问题描述】:

我们有一个应用程序正在使用informix ENCRYPT_TDES 函数。我发现 SQL SERVER 有一个名为 ENCRYPTBYPASSPHRASE 的函数,它也使用 TDES。然而,结果却大不相同。 SQL SERVER 一个返回一个 varbinary,而 Informix 一个返回一个 BASE64 字符串。

这是 Informix 语句的一个示例:

SELECT encrypt_tdes('12345CF','thepassword') from sometable

结果示例:

18A//AAAACA150blzB2/uXYO8vtaqBZpg==

这是我对 SQL SERVER 2008 所做的(但与 Informix 解密不兼容,反之亦然):

DECLARE @bin AS VARBINARY(256)
SET @bin = ENCRYPTBYPASSPHRASE('thisisthepassword', '12345CF')
select CAST(N'' AS XML)
    .value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'VARCHAR(MAX)')

结果示例:

AQAAAOVcL3PwM28dUENp1JF845auaRH9loIrDA==

我假设我的问题可能在于编码。但是,我似乎无法解决这个问题。如果无法通过内置的 MS SQL 函数实现,那么你们中的任何人都知道可以加密并返回与 Informix 兼容的字符串的 VB.NET 代码,因此我可以添加一个 .NET dll 并在我的 MS SQL 查询中使用它。

感谢您的帮助!

编辑:谁能帮我找到一种将 Informix ENCRYPT_TDES 函数模仿成 C# 或 VB.NET 的方法?

【问题讨论】:

  • 仅供参考 这可能是因为两个平台都采用密码短语,然后从中派生一个适当大小的密钥,然后用于加密数据;不同的推导方法=不同的密钥=不同的密文。文档指出 encrypt_tdes 使用密码短语的 sha1 散列,而 mssql 使用 cryptoapi 派生密钥,该密钥具有比简单散列更复杂的方法。
  • 谢谢,那很有道理。您是否偶然知道我如何在 C# 或 VB.NET 中复制 Informix?我一直在谷歌上搜索它。我可以在 SQL 中使用 .NET 程序集来做到这一点。它不是一个使用频率很高的函数,仅用于单次选择,因此使用 .NET 程序集就可以了。
  • 不知道我害怕,将 C# 标签添加到您的问题中
  • 好主意。感谢您的洞察力。你帮我指明了正确的方向。

标签: c# .net sql-server encryption informix


【解决方案1】:

EncryptByPassPhraseCREATE SYMMETRIC KEY 中指定的密钥仅用作生成实际密钥的种子(我不知道它们使用的算法,但我想像Rfc2898DeriveBytes 这样的算法)。

您可能能够在 C# 中复制 Informix 逻辑,并可能将其放置在 SQL CLR 函数中。从 cmets 看来,该算法可能只是计算给定密码的 SHA-1 哈希,并将其用作实际密钥。请参阅SHA1CryptoServiceProviderSystem.Security.Cryptography.TripleDESProvider

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多