当前位置: 代码迷 >> Sql Server >> 关于sqlserver加密的有关问题
  详细解决方案

关于sqlserver加密的有关问题

热度:27   发布时间:2016-04-24 09:19:23.0
关于sqlserver加密的问题
这个是dephi的

const  
   XorKey: array[0..7] of Byte = ($B2, $09, $BB, $55, $93, $6D, $44, $47); //字符串加密用   
    
function Enc(Str: string): string; //字符加密函數  這是用的一個異或加密   
var  
   i, j: Integer;   
begin  
   Result := '';   
   j := 0;   
   for i := 1 to Length(Str) do  
   begin  
      Result := Result + IntToHex(Byte(Str[i]) xor XorKey[j], 2);   
      j := (j + 1) mod 8;   
   end;   
end;   

现在想用sqlserver实现,求大神了~~~~
------解决思路----------------------
没有做过,给你个思路:
1.数组可以用临时表的方式来实现
2 IntToHex函数可以参与:

--十进制转为十六进制
 
DECLARE 
@binary varbinary(255), 
@str_return varchar(255) 
 
SELECT 
@binary = CONVERT(varbinary(255),29327795562177529) 
  
EXEC master.dbo.xp_varbintohexstr @binary, @str_return OUTPUT 
SELECT 
结果 = reverse(@str_return)

3.SQL中的异或运算符 ^
------解决思路----------------------

CREATE TABLE dbo.XorKeys
(
    id     tinyint
,   xorkey binary(1)
)

INSERT INTO XorKeys VALUES ( 0, 0xB2 )
INSERT INTO XorKeys VALUES ( 1, 0x09 )
INSERT INTO XorKeys VALUES ( 2, 0xBB )
INSERT INTO XorKeys VALUES ( 3, 0x55 )
INSERT INTO XorKeys VALUES ( 4, 0x93 )
INSERT INTO XorKeys VALUES ( 5, 0x6D )
INSERT INTO XorKeys VALUES ( 6, 0x44 )
INSERT INTO XorKeys VALUES ( 7, 0x47 )

CREATE FUNCTION dbo.Enc
(
    @Str varchar(255)
)
RETURNS varchar(255)
AS
BEGIN
    
    DECLARE @XorKeys TABLE
    (
        id     tinyint
    ,   xorkey binary(1)
    )
    
    INSERT INTO @XorKeys SELECT id, xorkey FROM XorKeys
    
    DECLARE @i      int       = 1
    ,       @j      int       = 0
    ,       @char   char(1)
    ,       @xorkey binary(1)
    
    DECLARE @Result VARCHAR(255) = ''
    
    WHILE @i <= LEN(@Str)
    BEGIN
        SELECT @char   = SUBSTRING(@Str, @i, 1)
        ,      @xorkey = ( SELECT xorkey FROM @XorKeys WHERE id = @j )
        
        SELECT @Result = @Result + sys.fn_varbintohexsubstring(0, CONVERT(TINYINT, CONVERT(BINARY(1), @char)) ^ @xorkey, 1, 0)
        
        SELECT @i = @i + 1
        ,      @j = (@j + 1) % 8
    END
    
    RETURN @Result
    
END
  相关解决方案