加密的存储过程解密

这个解4000字节以内的还行,4000以外的自己写个小程序吧。
create     PROCEDURE   sp_decrypt_sp   (@objectName   varchar(50))
AS
DECLARE     @OrigSpText1   nvarchar(4000),     @OrigSpText2   nvarchar(4000)   ,   @OrigSpText3   nvarchar(4000),   @resultsp   nvarchar(4000)
declare     @i   int   ,   @t   bigint

--get   encrypted   data
SET   @OrigSpText1=(SELECT   ctext   FROM   syscomments     WHERE   id   =   object_id(@objectName))
SET   @OrigSpText2= 'ALTER   PROCEDURE   '+   @objectName   + '   WITH   ENCRYPTION   AS   '+REPLICATE( '- ',   3938)
EXECUTE   (@OrigSpText2)

SET   @OrigSpText3=(SELECT   ctext   FROM   syscomments     WHERE   id   =   object_id(@objectName))
SET   @OrigSpText2= 'CREATE   PROCEDURE   '+   @objectName   + '   WITH   ENCRYPTION   AS   '+REPLICATE( '- ',   4000-62)

--start   counter
SET   @i=1
--fill   temporary   variable
SET   @resultsp   =   replicate(N 'A ',   (datalength(@OrigSpText1)   /   2))

--loop
WHILE   @i <=datalength(@OrigSpText1)/2
BEGIN
--reverse   encryption   (XOR   original+bogus+bogus   encrypted)
SET   @resultsp   =   stuff(@resultsp,   @i,   1,   NCHAR(UNICODE(substring(@OrigSpText1,   @i,   1))   ^
                                                                (UNICODE(substring(@OrigSpText2,   @i,   1))   ^
                                                                UNICODE(substring(@OrigSpText3,   @i,   1)))))
SET   @i=@i+1
END
--drop   original   SP
EXECUTE   ( 'drop   PROCEDURE   '+   @objectName)
--remove   encryption
--preserve   case
SET   @resultsp=REPLACE((@resultsp), 'WITH   ENCRYPTION ',   ' ')
SET   @resultsp=REPLACE((@resultsp), 'With   Encryption ',   ' ')
SET   @resultsp=REPLACE((@resultsp), 'with   encryption ',   ' ')
IF   CHARINDEX( 'WITH   ENCRYPTION ',UPPER(@resultsp)   )> 0  
    SET   @resultsp=REPLACE(UPPER(@resultsp), 'WITH   ENCRYPTION ',   ' ')
--replace   Stored   procedure   without   enryption
execute(   @resultsp)
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值