Wrox Programmer Forums
|
SQL Server 2000 General discussion of Microsoft SQL Server -- for topics that don't fit in one of the more specific SQL Server forums. version 2000 only. There's a new forum for SQL Server 2005.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the SQL Server 2000 section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old October 20th, 2006, 04:35 PM
Friend of Wrox
 
Join Date: Nov 2003
Posts: 625
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via MSN to jemacc
Default

How can I remove the history from your script. Once the number is inserted and encrypted I can decrypted using
select dbo.ufn_paymentCreditCardDecrypt(CardNumber, 'NewSecret')PmtCrdCardNumberDecrypted from customer I only want to encrypt the new inserted records.

your help will be greatly appreciated.

Jaime E. Maccou
 
Old October 21st, 2006, 03:22 AM
joefawcett's Avatar
Wrox Author
 
Join Date: Jun 2003
Posts: 3,074
Thanks: 1
Thanked 38 Times in 37 Posts
Default

Do you want to encrypt one record as it is inserted or a batch in one go?

--

Joe (Microsoft MVP - XML)
 
Old October 21st, 2006, 02:05 PM
Friend of Wrox
 
Join Date: Nov 2003
Posts: 625
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via MSN to jemacc
Default

I will like to insert each record when inserted.

Jaime E. Maccou
 
Old October 23rd, 2006, 08:45 PM
Friend of Wrox
 
Join Date: Nov 2003
Posts: 625
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via MSN to jemacc
Default

Hi All,

Here are my final results; try it and see if it works for you.

/*Download this file from here. You will need it: http://www.microsoft.com/downloads/d...Vc8ee5Fg%3d%3d



In addition, here is the site where I got it from: http://www.dbazine.com/sql/sql-articles/larsen2 the instruction is here as well.*/


USE [Northwind]
GO
/****** Object: Table [dbo].[customers] Script Date: 10/23/2006 20:27:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
    CREATE TABLE [dbo].[customers](
        [SubscriptionID] [int] IDENTITY(1,1) NOT NULL,
        [CustomerID] [int] NOT NULL,
        [NameOnCard] [varchar](255) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [CardType] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
        [ExpirationDate] [datetime] NOT NULL,
        [AuthCode] [int] NOT NULL,
        [DateCreated] [datetime] NOT NULL CONSTRAINT [DF_customers_DateCreated] DEFAULT (getdate()),
        [DateModified] [datetime] NOT NULL CONSTRAINT [DF_customers_DateModified] DEFAULT (getdate()),
        [CardNumber] [varchar](250) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
        CONSTRAINT [PK_customers] PRIMARY KEY CLUSTERED
    (
        [SubscriptionID] ASC
    )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY]

    GO
    SET ANSI_PADDING OFF


--update all customer to encrypt CardNumber numbers using 'password'
    UPDATE customers
    SET CardNumber = dbo.CAPICOMEncrypt(CardNumber, 'password')
    WHERE len(CardNumber) < 20

--update all customer to decrypt CardNumber numbers using 'password'
    UPDATE customers
    SET CardNumber = dbo.CAPICOMDecrypt(CardNumber, 'password')
    WHERE len(CardNumber) > 20

--update all customer to encrypt CardNumber numbers using 'new password', that were encrypted using 'password'
    UPDATE customers
    SET CardNumber = dbo.CAPICOMEncrypt(dbo.CAPICOMDecrypt(CardNumber, 'password'), 'newpassword')
    WHERE len(CardNumber) < 20


    CREATE FUNCTION dbo.CAPICOMEncrypt
    (@TextToEncrypt varchar(4000), @Secret varchar(1000))
    RETURNS varchar(4000)
    AS
    BEGIN
        DECLARE @EncryptedText varchar(4000)

        DECLARE @rc int
        DECLARE @object int
        DECLARE @Method_call varchar(4000)
        
        -- Encrypt
        EXEC @rc = sp_OACreate 'CAPICOM.EncryptedData', @object OUT
        if @rc <> 0
        begin
         return NULL
        end
        
        EXEC @rc = sp_OASetProperty @Object, 'Algorithm.Name', 3 -- 3DES
        if @rc <> 0
        begin
         return NULL
        end
        
        EXEC @rc = sp_OASetProperty @Object, 'Algorithm.KeyLength', 3 -- 128 bit key
        if @rc <> 0
        begin
         return NULL
        end
        
        set @method_call = 'SetSecret("' + @Secret + '")'
        EXEC @rc=sp_OAMethod @Object, @method_call
        if @rc <> 0
        begin
         return NULL
        end
        
        EXEC @rc=sp_OASetProperty @Object, 'Content',@TextToEncrypt
        if @rc <> 0
        begin
         return NULL
        end
        
        EXEC @rc=sp_OAMethod @Object, 'Encrypt(0)', @EncryptedText out
        if @rc <> 0
        begin
         return NULL
        end
        
        -- Destroy object
        exec @rc = sp_OADestroy @object

        return @EncryptedText
    END

    CREATE FUNCTION dbo.CAPICOMDecrypt
    (@TextToDecrypt varchar(4000), @Secret varchar(1000))
    RETURNS varchar(4000)
    AS
    BEGIN
        DECLARE @DecryptedText varchar(4000)

        DECLARE @rc int
        DECLARE @object int
        DECLARE @Method_call varchar(4000)
        
        -- Decrypt
        EXEC @rc = sp_OACreate 'CAPICOM.EncryptedData', @object OUT
        if @rc <> 0
        begin
         return NULL
        end
        
        set @method_call = 'SetSecret("' + @Secret + '")'
        EXEC @rc=sp_OAMethod @Object, @method_call
        if @rc <> 0
        begin
         return NULL
        end
        
        set @method_call = 'Decrypt("' + @TextToDecrypt + '")'
        EXEC @rc=sp_OAMethod @Object,@method_call
        if @rc <> 0
        begin
         return NULL
        end
        
        EXEC @rc=sp_OAGetProperty @Object, 'Content',@DecryptedText out
        if @rc <> 0
        begin
         return NULL
        end
        
        -- Destroy object
        exec @rc = sp_OADestroy @object

        return @DecryptedText
    END

    --Step 1

    --A.Create the encrypt function to call the com application CAPICOM

    CREATE FUNCTION dbo.CAPICOMEncrypt

    (@TextToEncrypt varchar(4000), @Secret varchar(1000))

    RETURNS varchar(4000)
    AS
    BEGIN
         DECLARE @EncryptedText varchar(4000)
    
         DECLARE @rc int

         DECLARE @object int

         DECLARE @Method_call varchar(4000)

        
         -- Encrypt

         EXEC @rc = sp_OACreate 'CAPICOM.EncryptedData', @object OUT

         if @rc <> 0

         begin

            return NULL

         end
    

         EXEC @rc = sp_OASetProperty @Object, 'Algorithm.Name', 3 -- 3DES

         if @rc <> 0

         begin

            return NULL

         end
        
         EXEC @rc = sp_OASetProperty @Object, 'Algorithm.KeyLength', 3 -- 128 bit key

         if @rc <> 0

         begin

            return NULL
         end
        
         set @method_call = 'SetSecret("' + @Secret + '")'

         EXEC @rc=sp_OAMethod @Object, @method_call

         if @rc <> 0

         begin

            return NULL

         end
        
         EXEC @rc=sp_OASetProperty @Object, 'Content',@TextToEncrypt

         if @rc <> 0

         begin

            return NULL

         end
        
         EXEC @rc=sp_OAMethod @Object, 'Encrypt(0)', @EncryptedText out

         if @rc <> 0

         begin

            return NULL

         end
        
         -- Destroy object
         exec @rc = sp_OADestroy @object
         return @EncryptedText

    END

    --B. Create the Decrypt function to call the com application CAPICOM


    CREATE FUNCTION dbo.CAPICOMDecrypt

    (@TextToDecrypt varchar(4000), @Secret varchar(1000))

    RETURNS varchar(4000)

    AS

    BEGIN

         DECLARE @DecryptedText varchar(4000)
        
         DECLARE @rc int

         DECLARE @object int

         DECLARE @Method_call varchar(4000)


         -- Decrypt

         EXEC @rc = sp_OACreate 'CAPICOM.EncryptedData', @object OUT

         if @rc <> 0

         begin

            return NULL

         end
        
         set @method_call = 'SetSecret("' + @Secret + '")'

         EXEC @rc=sp_OAMethod @Object, @method_call

         if @rc <> 0

         begin

            return NULL

         end

        

         set @method_call = 'Decrypt("' + @TextToDecrypt + '")'

         EXEC @rc=sp_OAMethod @Object,@method_call

         if @rc <> 0

         begin

            return NULL

         end

        

         EXEC @rc=sp_OAGetProperty @Object, 'Content',@DecryptedText out

         if @rc <> 0

         begin

            return NULL

         end

        

         -- Destroy object

         exec @rc = sp_OADestroy @object
        
         return @DecryptedText

    END

    

    --Step2
    --Create store procedure to update and encrypt credit card number
    
        Create procedure usp_EncryptCardNumber
        as
        UPDATE customers
        SET CardNumber = dbo.CAPICOMDecrypt(CardNumber, 'password')—Here we will decide best password to use
        WHERE len(CardNumber) < 20


    --Create store procedure to update and decrypt credit card number
    
        Create procedure usp_DecryptCardNumber
        as
        UPDATE customers
        SET CardNumber = dbo.CAPICOMDecrypt(CardNumber, 'password')—Must be the same as encrypted password
        WHERE len(CardNumber) > 20


thanks to all
Greg Larsen
joefawcett
snSQL



Jaime E. Maccou





Similar Threads
Thread Thread Starter Forum Replies Last Post
Credit Card Processor stu9820 ASP.NET 1.0 and 1.1 Basics 3 June 22nd, 2007 02:51 PM
Debit and credit formats Tachyophan Access VBA 0 October 24th, 2006 07:17 AM
ASP credit card p2ptolu Classic ASP Basics 2 March 29th, 2006 08:33 PM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.