快速业务通道

在SQL SERVER中实现RSA加密算法

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-03-18
/*本次修改增加了unicode的支持,但是加密后依然显示为16进制数据,因为进行RSA加密后所得到的unicode编码是无法显示的,所以密文依然采用16进制数据显示。

需要特别注意:如果要对中文进行加密,那么所选取的两个素数要比较大,两个素数的成绩最好要大于65536,即大于unicode的最大编码值

*/

在SQL SERVER中实现RSA加密算法(第二版)

--判断是否为素数

if object_id(''f_PRimeNumTest'') is not null

drop function f_primeNumTest

go

create function [dbo].[f_primeNumTest]

(@p int)

returns bit

begin

declare @flg bit,@i int

select @flg=1, @i=2

while @i<sqrt(@p)

begin

     if(@p%@i=0 )

     begin

        set @flg=0

       break

     end

     set @i=@i+1

end

return @flg

end

go

--判断两个数是否互素



if object_id(''f_isNumsPrime'') is not null

drop function f_isNumsPrime

go

create function f_isNumsPrime

(@num1 int,@num2 int)

returns bit

begin

declare @tmp int,@flg bit

set @flg=1

while (@num2%@num1<>0)

begin

    select @tmp=@num1,@num1=@num2%@num1,@num2=@tmp

end

if @num1=1

     set @flg=0

return @flg

end

go

--产生密钥对

if object_id(''p_createKey'') is not null

drop proc p_createKey

go

create proc p_createKey

@p int,@q int

as

begin

    declare @n bigint,@t bigint,@flag int,@d int

    if dbo.f_primeNumTest(@p)=0

    begin

       print cast(@p as varchar)+''不是素数,请重新选择数据''

       return

    end

    if dbo.f_primeNumTest(@q)=0

    begin

       print cast(@q as varchar)+''不是素数,请重新选择数据''

       return

end

print ''请从下列数据

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号