0

クレジット カードを正常に暗号化するスクリプトがあります。creditcard 列に挿入が行われると自動的に暗号化されるように、トリガーとして機能させる必要があります。現在、トリガーは機能しますが、クレジットカード列は varchar です。アプリが挿入しようとすると、次のようにします。

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

それは問題なく動作しますが、どうすれば varbinary(max) を varchar に変換できますか (これがクレジット カードの列です)。creditcard 列は私の会社で長い間 varchar であり、多くのレガシー コードはそれが varchar であることに依存しています。

ありがとうございました

4

1 に答える 1

1

最も簡単な方法は、バイナリを base64 に変換し、それを varchar 列に格納することです。Base64 は、XML などの形式で表現できるように、ASCII エンコーディングを使用してバイナリ データをレンダリングする方法です。次のようにして変換を実行できます。

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

于 2008-10-02T15:57:06.587 に答える