-
Aug 5th, 2010, 09:28 AM
#1
SQL Server 2005 - 160 bit Encryption/Decryption function
I got bored at work, and I made this function in a few minutes...
It's using SHA1 (160 bits) hash to encrypt. You can encrypt any data type, you just have to convert/cast your data to VARBINARY(MAX), and from VARBINARY(MAX) to your data type when you decrypt.
The algorithm is the same as this one here: VB - 128, 160 and 256 Bit File Encryption/Decryption with MD5, SHA1 and SHA256
Code:
-- =============================================
-- Author: <Michael Ciurescu>
-- Create date: <2010-08-04>
-- Description: <160 bit Encryption/Decryption>
-- =============================================
CREATE FUNCTION [dbo].[fn_Encrypt]
(
@StuffToEncrypt VARBINARY(MAX)
, @Password VARCHAR(MAX)
)
RETURNS VARBINARY(MAX)
AS
BEGIN
/*
DECLARE @Data VARCHAR(MAX)
DECLARE @DecData VARCHAR(MAX)
DECLARE @EncData VARBINARY(MAX)
-- Data to encrypt
SET @Data = 'testing blah blah ... 12345678'
-- Encrypt
SET @EncData = dbo.fn_Encrypt(CAST(@Data AS VARBINARY(MAX)), 'password123')
SELECT @EncData AS [Encrypted Data], DATALENGTH(@EncData) AS [Data Length]
-- Decrypt
SET @DecData = CAST(dbo.fn_Encrypt(@EncData, 'password123') AS VARCHAR(MAX))
SELECT @DecData AS [Decrypted Data], DATALENGTH(@DecData) AS [Data Length]
*/
DECLARE @OutData VARBINARY(MAX)
DECLARE @Key VARBINARY(MAX)
DECLARE @KeyLen INT, @K INT, @B INT, @Blocks INT
SET @Key = HashBytes('SHA1', @Password)
SET @KeyLen = DATALENGTH(@Key)
SET @OutData = 0x
SET @B = 0
SET @Blocks = DATALENGTH(@StuffToEncrypt) / @KeyLen
WHILE @B <= @Blocks BEGIN
SET @K = 0
SET @Key = HashBytes('SHA1', @Password + CAST(@B AS VARCHAR(10)))
WHILE @K < @KeyLen BEGIN
IF (@B * @KeyLen + @K + 1) > DATALENGTH(@StuffToEncrypt) BEGIN
BREAK
END ELSE BEGIN
SET @OutData = @OutData +
CAST(CAST(SUBSTRING(@StuffToEncrypt, @B * @KeyLen + @K + 1, 1) AS INT) ^
CAST(SUBSTRING(@Key, @K + 1, 1) AS INT) AS VARBINARY(1))
END
SET @K = @K + 1
END
SET @B = @B + 1
END
RETURN @OutData
END
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|