以下是我的情况:我的数据库中有一列包含加密数据的列。此列是常规VARCHAR
列。此数据由Java app使用DES/ECB/PKCS5Padding
算法加密。我可以访问用于加密此数据的密钥文件。
我需要的是使用T-SQL解密这些数据。有可能吗?
我知道SQL Server加密/解密机制,但似乎它们适用于" new"数据(我创建表并开始将数据放入其中)由SQL Server本身加密,尚未被其他应用程序加密。
实际上,它与此Encrypt In .NET / Decrypt in SQL Server类似,但答案与C#有关,所以不是我的情况......
我发现它可以使用:
完成CREATE SYMMETRIC KEY TestSymmKey
WITH
ALGORITHM = DES,
KEY_SOURCE = 'initial_bytes'
ENCRYPTION BY PASSWORD = 'windowspass';
GO
DECLARE @KeyGUID UNIQUEIDENTIFIER;
SET @KeyGUID = KEY_GUID('TestSymmKey');
OPEN SYMMETRIC KEY TestSymmKey DECRYPTION BY PASSWORD = 'windowspass';
SELECT ENCRYPTBYKEY(@KeyGUID, 'Lorem ipsum')
我可以看到相同输入的返回值是不同的:
0x0082099FAF76A74581FAA53B7FE26B8001000000DF8C5134EF5FD25C89E221C1443810AC325F28AC083C48FBEFF337D4C247B83A39294A077E54E8A2
0x0082099FAF76A74581FAA53B7FE26B800100000087FF86D86DFFD6C32F7696DCA13BF4E85A032910B85E92731D493AC4FCE9756C07DA82F5AA0F4313
0x0082099FAF76A74581FAA53B7FE26B80010000003CDA110EB854563BAB73305A52AC4B78C5A613E167E7BBC8467195832C8810683CB19CF080FCC520
这可能是某种盐机制的原因。所以我不能简单地得到一些其他应用程序生成的DES结果,并尝试解密它,因为SQL Server会假设盐在其中?
第一个问题是我没有看到设置填充和模式的选项(例如ECB)。 第二个是结果是二进制的,我需要它作为字符串,所以可能需要一些Base64编码器?
我的目标是我可以在T-SQL中解密一些用Java加密的字符串甚至是在线工具(例如http://www.tools4noobs.com/online_tools/encrypt/)