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

在SQL SERVER中实现RSA加密算法

 2010-01-06 00:00:00 来源:WEB开发网   
核心提示: print '请从下列数据中选择其中一对,作为密钥'select@n=@p*@q,@t=(@p-1)*(@q-1)declare@eintset@e=2while@e<@tbeginifdbo.f_isNumsPrime(@e,@t)=0beginset@d=2while@

print '请从下列数据中选择其中一对,作为密钥'

    select @n=@p*@q,@t=(@p-1)*(@q-1)
    declare @e int
    set @e=2
    while @e<@t
    begin
       if dbo.f_isNumsPrime(@e,@t)=0
       begin
          set @d=2
       while @d<@n
            begin
              if(@e*@d%@t=1)
                 print cast(@e as varchar)+space(5)+cast(@d as varchar)
              set @d=@d+1
            end
    end
       set @e=@e+1        
    end
end

/*加密函数说明,@key 为上一个存储过程中选择的密码中的一个 ,@p ,@q 产生密钥对时选择的两个数。获取每一个字符的unicode值,然后进行加密,产生3个字节的16位数据*/

if object_id('f_RSAEncry') is not null
 drop function f_RSAEncry
go
create function f_RSAEncry
 (@s varchar(100),@key int ,@p int ,@q int)
returns nvarchar(4000)
as
begin
   declare @crypt varchar(8000)
     set @crypt=''
   while len(@s)>0
   begin
              declare @i bigint,@tmp varchar(10),@k2 int,@leftchar int
              select @leftchar=unicode(left(@s,1)),@k2=@key/2,@i=1
              while @k2>0
              begin
                     set @i=(cast(power(@leftchar,2) as bigint)*@i)%(@p*@q)
                     set @k2=@k2-1
              end 
              set @i=(@leftchar*@i)%(@p*@q)    
              set @tmp=''
              select @tmp=case when @i%16 between 10 and 15 then char( @i%16+55) else cast(@i%16 as varchar) end +@tmp,@i=@i/16
              from (select number from master.dbo.spt_values where type='p' and number<10 )K
              order by number desc
 
              set @crypt=@crypt+right(@tmp,6)
    
              set @s=stuff(@s,1,1,'')
 end
 return @crypt
end

Tags:SQL SERVER 实现

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