SQL SERVER 2008 version of Informix ENCRYPT_TDES

本文关键字:ENCRYPT TDES Informix of SERVER 2008 version SQL | 更新日期: 2023-09-27 18:19:42

我们有一个使用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查询中使用它。

谢谢你的帮助!

编辑:有人能帮我找到一种方法将InformixENCRYPT_TDES函数模拟到C#或VB.NET中吗?

SQL SERVER 2008 version of Informix ENCRYPT_TDES

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

您可能能够在C#中复制Informix逻辑,并可能将其放置在SQLCLR函数中。从评论中,听起来算法可能只是计算给定密码的SHA-1哈希,并将其用作实际密钥。参见SHA1CryptoServiceProviderSystem.Security.Cryptography.TripleDESProvider