sexta-feira, setembro 19, 2014

Cifrar em SQL com chave pública

Bem, vou começar pelo pré-requisito de obter uma chave pública para o teste, normalmente a chave pública será fornecido por uma entidade credível, neste exemplo em particular vou gerar a minha própria chave para o teste.
  1. Obter o certificado com o par chave pública/privada
    1. Ir ao IIS e escolher Server Certificates.
    2. Criar um certificado auto assinado (assumir que o nome dado ao certificado é test.pfx).

  2. Ir a linha de comandos e extrair a chave pública do certificado com o comando: sn -p text.pfx test.snk
  3. Registar a chave pública no SQL:
    IF (select count(*) from sys.asymmetric_keys where name = 'testKey') <> 0
    BEGIN
           DROP ASYMMETRIC KEY testKey
    END
    CREATE ASYMMETRIC KEY testKey 
    FROM FILE = N'test.snk'

  4. Usar a chave pública:
    DECLARE @AsymID INT;
    SET @AsymID = ASYMKEY_ID('testKey');
    PRINT ENCRYPTBYASYMKEY(@AsymID, 'Valor a cifrar')
Uma nota final, não averiguei o motivo mas a cifra feita pelo SQL faz byte reverse, se a descifra for feita noutro local que não o SQL isso tem de ser levado em consideração.

Sem comentários: