WEB开发网
开发学院数据库MSSQL Server 在SQL SERVER中实现RSA加密算法 阅读

在SQL SERVER中实现RSA加密算法

 2010-01-06 00:00:00 来源:WEB开发网   
核心提示: --解密:@key 为一个存储过程中选择的密码对中另一个数字 ,@p ,@q 产生密钥对时选择的两个数 ifobject_id('f_RSADecry')isnotnulldropfunctionf_RSADecrygocreatefunctionf_RSADecry(@snva

--解密:@key 为一个存储过程中选择的密码对中另一个数字 ,@p ,@q 产生密钥对时选择的两个数

if object_id('f_RSADecry') is not null
 drop function f_RSADecry
go
create function f_RSADecry
 (@s nvarchar(4000),@key int ,@p int ,@q int)
returns nvarchar(4000)
as
begin
 declare @crypt varchar(8000)
    set @crypt=''
 while len(@s)>0
    begin
       declare @leftchar bigint
       select @leftchar=sum(data1)
       from (   select case upper(substring(left(@s,6), number, 1)) when 'A' then 10 
                                                    when 'B' then 11
                                                    when 'C' then 12 
                                                    when 'D' then 13 
                                                    when 'E' then 14
                                                    when 'F' then 15 
                else substring(left(@s,6), number, 1)
                end* power(16, len(left(@s,6)) - number) data1 
         from (select number from master.dbo.spt_values where type='p')K
         where number <= len(left(@s,6))
     ) L
    declare @k2 int,@j bigint
       select @k2=@key/2,@j=1
    while @k2>0
       begin
      set @j=(cast(power(@leftchar,2)as bigint)*@j)%(@p*@q)
      set @k2=@k2-1
    end 
      set @j=(@leftchar*@j)%(@p*@q)
    set @crypt=@crypt+nchar(@j)
    set @s=stuff(@s,1,6,'')
    end
 return @crypt
end

【测试】

if object_id('tb') is not null
   drop table tb
go
create table tb(id int identity(1,1),col varchar(100))
go
insert into tb values(dbo.f_RSAEncry('中国人',779,1163,59))
insert into tb values(dbo.f_RSAEncry('Chinese',779,1163,59))
select * from tb
 
id col
1   00359B00E6E000EAF5
2   01075300931B0010A4007EDC004B340074A6004B34
 
select * ,解密后=dbo.f_RSADecry(col,35039,1163,59)
from tb
 
id     col                                                                                解密后
1     00359B00E6E000EAF5                                中国人
2     01075300931B0010A4007EDC004B340074A6004B34       Chinese

上一页  1 2 3 

Tags:SQL SERVER 实现

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接