22,207
社区成员
发帖
与我相关
我的任务
分享
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;
;
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
--十进制转为十六进制
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中的异或运算符 ^