sql代码加密后如何解密,这里有你需要的解密代码,使用简单。

 通过查询分析器将以下代码复制进去,然后使用exec sp_decrypt 加密的过程名称 即可打开加密过的代码,

另外如果想对自己的代码进行加密,只要在建立的视图、存储过程、函数等加上with    ENCRYPTION就可以实现sql代码加密了。

create      PROCEDURE    sp_decrypt(@objectname    varchar(50))  
   AS  
   begin  
   set    nocount    on   
    begin    tran  
   declare    @objectname1    varchar(100),@orgvarbin    varbinary(8000)  
   declare    @sql1    nvarchar(4000),@sql2    varchar(8000),@sql3    nvarchar(4000),@sql4    nvarchar(4000)  
   DECLARE      @OrigSpText1    nvarchar(4000),      @OrigSpText2    nvarchar(4000)    ,    @OrigSpText3    nvarchar(4000),    @resultsp    nvarchar(4000)  
   declare      @i    int,@status    int,@type    varchar(10),@parentid    int  
   declare    @colid    int,@n    int,@q    int,@j    int,@k    int,@encrypted    int,@number    int  
   select    @type=xtype,@parentid=parent_obj    from    sysobjects    where    id=object_id(@objectname)  
   
   create    table      #temp(number    int,colid    int,ctext    varbinary(8000),encrypted    int,status    int)  
   insert    #temp    SELECT    number,colid,ctext,encrypted,status    FROM    syscomments      WHERE    id    =    object_id(@objectname)  
   select    @number=max(number)    from    #temp  
   set    @k=0  
   
   while    @k<=@number    
   begin  
   if    exists(select    1    from    syscomments    where    id=object_id(@objectname)    and    number=@k)  
   begin  
   if    @type='P'  
   set    @sql1=(case    when    @number>1    then    'ALTER    PROCEDURE    '+    @objectname    +';'+rtrim(@k)+'    WITH    ENCRYPTION    AS    '  
                                                       else    'ALTER    PROCEDURE    '+    @objectname+'    WITH    ENCRYPTION    AS    '  
                                                       end)  
   
   if    @type='TR'  
   begin  
   declare    @parent_obj    varchar(255),@tr_parent_xtype    varchar(10)  
   select    @parent_obj=parent_obj    from    sysobjects    where    id=object_id(@objectname)  
   select    @tr_parent_xtype=xtype    from    sysobjects    where    id=@parent_obj  
   if    @tr_parent_xtype='V'  
   begin  
   set    @sql1='ALTER    TRIGGER    '+@objectname+'    ON    '+OBJECT_NAME(@parentid)+'    WITH    ENCRYPTION    INSTERD    OF    INSERT    AS    PRINT    1    '  
   end  
   else  
   begin  
   set    @sql1='ALTER    TRIGGER    '+@objectname+'    ON    '+OBJECT_NAME(@parentid)+'    WITH    ENCRYPTION    FOR    INSERT    AS    PRINT    1    '  
   end  
   
   end  
   if    @type='FN'    or    @type='TF'    or    @type='IF'  
   set    @sql1=(case    @type    when    'TF'    then    
   'ALTER    FUNCTION    '+    @objectname+'(@a    char(1))    returns    @b    table(a    varchar(10))    with    encryption    as    begin    insert    @b    select    @a    return    end    '  
   when    'FN'    then  
   'ALTER    FUNCTION    '+    @objectname+'(@a    char(1))    returns    char(1)    with    encryption    as    begin    return    @a    end'  
   when    'IF'    then  
   'ALTER    FUNCTION    '+    @objectname+'(@a    char(1))    returns    table    with    encryption    as    return    select    @a    as    a'  
   end)  
   
   if    @type='V'  
   set    @sql1='ALTER    VIEW    '+@objectname+'    WITH    ENCRYPTION    AS    SELECT    1    as    f'  
   
   set    @q=len(@sql1)  
   set    @sql1=@sql1+REPLICATE('-',4000-@q)  
   select    @sql2=REPLICATE('-',8000)  
   set    @sql3='exec(@sql1'  
   select    @colid=max(colid)    from    #temp    where    number=@k    
   set    @n=1  
   while    @n<=CEILING(1.0*(@colid-1)/2)    and    len(@sql3)<=3996  
   begin    
   set    @sql3=@sql3+'+@'  
   set    @n=@n+1  
   end  
   set    @sql3=@sql3+')'  
   exec    sp_executesql    @sql3,N'@sql1    nvarchar(4000),@    varchar(8000)',@sql1=@sql1,@=@sql2  
   
   end  
   set    @k=@k+1  
   end  
   
   set    @k=0  
   while    @k<=@number    
   begin  
   
   if    exists(select    1    from    syscomments    where    id=object_id(@objectname)    and    number=@k)  
   begin  
   select    @colid=max(colid)    from    #temp    where    number=@k    
   set    @n=1  
   
   while    @n<=@colid  
   begin  
   select    @OrigSpText1=ctext,@encrypted=encrypted,@status=status    FROM    #temp      WHERE    colid=@n    and    number=@k  
   
   SET    @OrigSpText3=(SELECT    ctext    FROM    syscomments    WHERE    id=object_id(@objectname)    and    colid=@n    and    number=@k)  
   if    @n=1  
   begin  
   if    @type='P'  
   SET    @OrigSpText2=(case    when    @number>1    then    'CREATE    PROCEDURE    '+    @objectname    +';'+rtrim(@k)+'    WITH    ENCRYPTION    AS    '  
                                                 else    'CREATE    PROCEDURE    '+    @objectname    +'    WITH    ENCRYPTION    AS    '  
                                                 end)  
   
   
   if    @type='FN'    or    @type='TF'    or    @type='IF'  
   SET    @OrigSpText2=(case    @type    when    'TF'    then    
   'CREATE    FUNCTION    '+    @objectname+'(@a    char(1))    returns    @b    table(a    varchar(10))    with    encryption    as    begin    insert    @b    select    @a    return    end    '  
   when    'FN'    then  
   'CREATE    FUNCTION    '+    @objectname+'(@a    char(1))    returns    char(1)    with    encryption    as    begin    return    @a    end'  
   when    'IF'    then  
   'CREATE    FUNCTION    '+    @objectname+'(@a    char(1))    returns    table    with    encryption    as    return    select    @a    as    a'  
   end)  
   
   if    @type='TR'    
   begin  
   
   if    @tr_parent_xtype='V'  
   begin  
   set    @OrigSpText2='CREATE    TRIGGER    '+@objectname+'    ON    '+OBJECT_NAME(@parentid)+'    WITH    ENCRYPTION    INSTEAD    OF    INSERT    AS    PRINT    1    '  
   end  
   else  
   begin  
   set    @OrigSpText2='CREATE    TRIGGER    '+@objectname+'    ON    '+OBJECT_NAME(@parentid)+'    WITH    ENCRYPTION    FOR    INSERT    AS    PRINT    1    '  
   end  
   
   end  
   
   if    @type='V'  
   set    @OrigSpText2='CREATE    VIEW    '+@objectname+'    WITH    ENCRYPTION    AS    SELECT    1    as    f'  
   
   set    @q=4000-len(@OrigSpText2)  
   set    @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)  
   end  
   else  
   begin  
   SET    @OrigSpText2=REPLICATE('-',    4000)  
   end  
   SET    @i=1  
   
   SET    @resultsp    =    replicate(N'A',    (datalength(@OrigSpText1)    /    2))  
   
   WHILE    @i<=datalength(@OrigSpText1)/2  
   BEGIN  
   
   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  
   set    @orgvarbin=cast(@OrigSpText1    as    varbinary(8000))  
   set    @resultsp=(case    when    @encrypted=1    
                                           then    @resultsp    
                                           else    convert(nvarchar(4000),case    when    @status&2=2    then    uncompress(@orgvarbin)    else    @orgvarbin    end)  
                                 end)  
   print    @resultsp  
   
   set    @n=@n+1  
   
   end  
   
   end  
   set    @k=@k+1  
   end  
   
   drop    table    #temp  
   rollback    tran  
   end  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值