我想知道在SQL中是否可行
我知道vigenere(密码)加密可以加密像“你好,你好吗”这样的值成为“Hfnlp,Jox crf aov”,但问题是它保持数字未加密“1234567”将保持“1234567”
任何想法如何加密包括数字在内的所有内容,并将其作为SQL Server中的函数/过程?
我自己编写了这个脚本
要加密
ALTER FUNCTION [dbo].[fnEncrypt]
(
@Str varchar(max),
@key varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
--Akram Mustafa
declare @i int = 1
declare @x int = 0
declare @Result varchar(max) = ''
declare @List varchar(100) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
declare @TempKey varchar(max) = @key
WHILE LEN(@TempKey) < LEN(@Str)
BEGIN
SET @TempKey = @TempKey + @key
END
SET @key = @TempKey
WHILE (@i <= LEN(@Str))
BEGIN
IF (CHARINDEX(SUBSTRING(@Str, @i, 1), @List) > 0)
BEGIN
SET @x = ((CHARINDEX(SUBSTRING(@Str, @i, 1), @List) + CHARINDEX(SUBSTRING(@key, @i, 1), @List)) % LEN(@List)) + 1
SET @Result = @Result + SUBSTRING(@List, @x, 1)
END
ELSE
BEGIN
SET @Result = @Result + SUBSTRING(@Str, @i, 1)
END
SET @i = @i + 1
END
RETURN @Result
END
要解密
ALTER FUNCTION [dbo].[fnDecrypt]
(
@Str varchar(max),
@key varchar(max)
)
RETURNS varchar(max)
AS
BEGIN
--Akram Mustafa
declare @i int = 1
declare @x int = 0
declare @Result varchar(max) = ''
declare @List varchar(100) = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
declare @TempKey varchar(max) = @key
WHILE LEN(@TempKey) < LEN(@Str)
BEGIN
SET @TempKey = @TempKey + @key
END
SET @key = @TempKey
WHILE (@i <= LEN(@Str))
BEGIN
IF (CHARINDEX(SUBSTRING(@Str, @i, 1), @List) > 0)
BEGIN
SET @x = ((CHARINDEX(SUBSTRING(@Str, @i, 1), @List) - CHARINDEX(SUBSTRING(@key, @i, 1), @List) + LEN(@List) - 1) % LEN(@List))
IF @x = 0
BEGIN
SET @x = LEN(@List)
END
SET @Result = @Result + SUBSTRING(@List, @x, 1)
END
ELSE
BEGIN
SET @Result = @Result + SUBSTRING(@Str, @i, 1)
END
SET @i = @i + 1
END
RETURN @Result
END