Eu tenho um problema estranho de criptografia e descriptografia. A criptografia funcionou bem no SQL 2008 R2, estávamos usando TRIPLE_DES_3KEY. Isso foi preterido no SQL 2016, então estávamos testando o AES_256. Minha corda original continua sendo cortada, não tenho certeza do que está fazendo ou como explicar. Tenho certeza de que estou perdendo alguma coisa, mas não tenho certeza do quê. Detalhes abaixo. Obrigado!
Minha chave simétrica:
CREATE SYMMETRIC KEY SK03
WITH
ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = 'ThisIsMyAES_256EncryptionTest';
Minha mesa:
CREATE TABLE [dbo].[_EncryptionTest](
[OriginalValue] [varchar](max) NULL,
[Encryptedvalue] [varbinary](8000) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Meu procedimento armazenado:
CREATE PROCEDURE [dbo].[_usp_EncryptionTest]
@InputString varchar(MAX),
@InputString2 varchar(MAX)
AS
BEGIN
SET NOCOUNT ON;
OPEN SYMMETRIC KEY SK03 DECRYPTION BY PASSWORD='ThisIsMyAES_256EncryptionTest'
INSERT INTO _EncryptionTest
(OriginalValue, Encryptedvalue)
VALUES (
@InputString
,ENCRYPTBYKEY(Key_GUID('SK03'), CONVERT(VARBINARY,@InputString2))
)
CLOSE SYMMETRIC KEY SK03;
END
Meu SQL de teste:
EXEC _usp_EncryptionTest 'Spring is Finally Here! Spring is Finally Here!','Spring is Finally Here! Spring is Finally Here!'
Como você pode ver na imagem abaixo, os dados são atualizados para minha tabela.
Meu SQL de descriptografia:
OPEN SYMMETRIC KEY SK03 DECRYPTION BY PASSWORD='ThisIsMyAES_256EncryptionTest'
SELECT
[OriginalValue]
,CONVERT(varchar(MAX), DECRYPTBYKEY([EncryptedValue]))
FROM
_EncryptionTest
CLOSE SYMMETRIC KEY SK03;
A imagem abaixo deve mostrar os resultados com o valor de corte decriotado.
Tente definir o comprimento do
varbinary
em sua instrução convert comovarbinary(max).
por https://technet.microsoft.com/en-us/library/ms188362(v=sql.110).aspx , o padrão seria 30.Você pode replicar isso com o seguinte script:
O problema está na SENHA DE CRIPTOGRAFIA. Para AES 256 ENCRYPTION PASSWORD o comprimento deve ser 32. use o código abaixo e verifique.