2008-10-02 5 views
0

У меня есть сценарий, который успешно шифрует кредитную карту. Мне нужно, чтобы он работал как триггер, так что любая вставка, сделанная для столбца кредитной карты, автоматически шифрует его. Прямо сейчас, мой триггер работает, но колонка creditcard является varchar. Когда приложение пытается вставить, я делаю это:Триггер шифрования SQL Server 2005

 
DECLARE @encryptedCreditCardNumber varbinary(max) 
SET @encryptedCreditCardNumber = EncryptByKey(Key_GUID('testKey'), @CreditCardNumber)); 

Это прекрасно работает, но как я затем преобразовать VARBINARY (макс) на VARCHAR (что столбец кредитной карты). Колонка creditcard долгое время была varchar в моей компании, и много устаревшего кода зависит от того, что он является varchar.

Спасибо

ответ

1

Ваш простой подход будет преобразовать двоичный в base64 и хранить, что в столбце VARCHAR. Base64 - это метод для рендеринга двоичных данных с использованием ascii-кодирования, чтобы он мог быть представлен в таких форматах, как XML. Вы можете выполнить преобразование, выполнив:

select cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@encryptedCreditCardNumber")))', 'varchar(max)'); 

Это проходит через XML-посредник правильно кодировать VARBINARY в VARCHAR. Чтобы обратить этот процесс на использовании DB:

select cast(N'' as xml).value('xs:base64Binary(sql:variable("@base64stringvariable"))', 'varbinary(20)'); 

Редактировать: Полезная ссылка - http://blogs.msdn.com/sqltips/archive/2008/06/30/converting-from-base64-to-varbinary-and-vice-versa.aspx

Смежные вопросы