SQL SERVER 2008版本的Informix ENCRYPT_TDES

时间:2012-01-06 14:52:08

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

我们有一个使用informix ENCRYPT_TDES函数的应用程序。我发现SQL SERVER有一个名为ENCRYPTBYPASSPHRASE的函数,它也使用TDES。但是,结果非常不同。 SQL SERVER 1返回一个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的方法吗?

1 个答案:

答案 0 :(得分:1)

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

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