我们有一个使用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的方法吗?答案 0 :(得分:1)
EncryptByPassPhrase
或CREATE SYMMETRIC KEY
中指定的密钥仅用作生成实际密钥的种子(我不知道他们使用的算法,但我想像Rfc2898DeriveBytes
这样的东西)
您可以在C#中复制Informix逻辑,并可能将其放在SQL CLR函数中。从评论中可以看出,算法可能只是计算给定密码的SHA-1哈希值,并将其用作实际密钥。请参阅SHA1CryptoServiceProvider
和System.Security.Cryptography.TripleDESProvider
。