【易飞】加密解密算法


写在前面

能搜索到本文章的同学,也真算是缘分。

本人在刚开始接触ERP时,到处寻找解密加密算法。

发现明明在顾问眼里都是随便可以提供的东西,却成为某些博主盈利的工具。

但是向顾问要对于某些要做二开的个人来说是很困难的,于是本人无偿放出(向顾问要的),只要到SQL里运行下,即可调用函数。

例如:

SELECT MA001,dbo.DecodePwd(MA001,MA003) from DSCMA

下方DSC是公用数据库,请读者按照自己公司的公用数据库更改即可。

也欢迎各位使用该ERP的同学们来交流,讨论,互相进步。

话不多说,算法献上。

 

使用声明:

本人提供的脚本仅供您个人用于非商业性目的。

您不得使用本人提供的脚本来销售产品或资源。

如果您想将脚本用于商业目的,请自行和鼎捷软件联系。

您在此保证您不会以任何违反任何适用于您作为使用者的任何管辖地的法律或法规的方式使用脚本。


 

 

USE [DSC]
GO

/****** DecodePwd ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE FUNCTION [dbo].[DecodePwd]
(
    @user nvarchar(32),
    @userPwd nvarchar(128)
)
RETURNS nvarchar(128)
AS
BEGIN
DECLARE @Return NVARCHAR(100)
SET @Return =''
DECLARE @KeyLen INT,@i INT,@n1 INT,@n2 INT
DECLARE @FStr1 CHAR(1),@FStr2 CHAR(1),@FStr3 CHAR(1),@FStr4 CHAR(1)
DECLARE @fnil nvarchar(128),@FF1 NVARCHAR(128)
SET @fnil = '''(&.&!''%&$"''&)" ",&)$(%#$-$#$$" '
SET @FF1 = ' !"#$%&''()*+,-./'
DECLARE @n int, @d int
DECLARE @Result nvarchar(100)
SET @i = LEN(@user)
SET @Result = SUBSTRING(@fnil,(@i-1)*2+1, 30-(@i-1)*2)
SET @n = @i-1
WHILE(@n>=0)
BEGIN
    SET @i = (ASCII(SUBSTRING(@user,@n+1,1)) - 32) % 16
    SET @d = (ASCII(SUBSTRING(@user,@n+1,1)) - 32) / 16 + 1
    SET @Result = @Result + CHAR(32 + @d + 1) + SUBSTRING(@FF1,@i+1,1)
    SET @n = @n-1
END
SET @KeyLen =0
SET @i =28
WHILE(@i>=1)
BEGIN
    IF(SUBSTRING(@userPwd,@i,1)<>SUBSTRING(@Result,@i,1))
    BEGIN
        SET @KeyLen = @i
        BREAK;
    END
    SET @i = @i-1
END
IF(@KeyLen =0) RETURN ''
SET @i = @KeyLen
WHILE(@i>=1)
BEGIN
    IF(@i<=4)
    BEGIN
        SET @FStr1 = SUBSTRING(@Result,@i,1)
        SET @FStr3 = SUBSTRING(@userPwd,@i,1)
        SET @FStr4 = SUBSTRING(@userPwd,32-4+@i,1)
        SET @n1 = ASCII(@FStr1) ^ ASCII(@FStr3)
        SET @n2 = ((ASCII(@FStr4)-32) / 16)
        SET @Return = CHAR((16*@n2)+32+@n1) + @Return
        SET @FStr4 = CHAR((ASCII(@FStr4) % 16)+32)
        SET @userPwd = SUBSTRING(@userPwd,1,32-4+@i-1)+@FStr4+SUBSTRING(@userPwd,32-4+@i+1,4-@i)
    END
    ELSE
    BEGIN
        SET @FStr1 = SUBSTRING(@Result,@i,1)
        SET @FStr3 = SUBSTRING(@userPwd,@i,1)
        SET @FStr4 = SUBSTRING(@userPwd,@i-4,1)
        SET @n1 = ASCII(@FStr1) ^ ASCII(@FStr3)
        SET @n2 = ((ASCII(@FStr4)-32) / 16)
        SET @Return = CHAR((16*@n2)+32+@n1) + @Return
        SET @FStr4 = CHAR((ASCII(@FStr4) % 16)+32)
        SET @userPwd = SUBSTRING(@userPwd,1,@i-4-1)+@FStr4+SUBSTRING(@userPwd,@i-4+1,32-@i+4)
    END
    SET @i = @i-1
END
RETURN @Return
END

GO


USE [DSC]
GO
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[EncodePwd]
(
    @user nvarchar(32),
    @userPwd nvarchar(32)
)
RETURNS nvarchar(128)
AS
BEGIN
DECLARE @fnil nvarchar(128),@FF1 NVARCHAR(128)
SET @fnil = '''(&.&!''%&$"''&)" ",&)$(%#$-$#$$" '
SET @FF1 = ' !"#$%&''()*+,-./'
DECLARE @n int, @i int, @d int
DECLARE @Result nvarchar(100)
SET @i = LEN(@user)
SET @Result = SUBSTRING(@fnil,(@i-1)*2+1, 30-(@i-1)*2)
SET @n = @i-1
WHILE(@n>=0)
BEGIN
    SET @i = (ASCII(SUBSTRING(@user,@n+1,1)) - 32) % 16
    SET @d = (ASCII(SUBSTRING(@user,@n+1,1)) - 32) / 16 + 1
    SET @Result = @Result + CHAR(32 + @d + 1) + SUBSTRING(@FF1,@i+1,1)
    SET @n = @n-1
END
DECLARE @n1 int    , @n2 int
DECLARE @FStr1 NCHAR(1), @FStr2 NCHAR(1), @FStr3 NCHAR(1), @Fchar1 NCHAR(1)
SET @i =1
WHILE(@i<=LEN(@userPwd))
BEGIN
    IF(@i<=4)
    BEGIN
        SET @FStr1 = SUBSTRING(@userPwd,@i,1)
        SET @FStr2 = SUBSTRING(@Result,@i,1)
        SET @FStr3 = SUBSTRING(@Result,28+@i,1)
        SET @n1 = ((ASCII(SUBSTRING(@userPwd,@i,1)) - 32) % 8)
        SET @n2 = ((ASCII(SUBSTRING(@userPwd,@i,1)) - 32) / 16)
        SET @Fchar1 = CHAR(@n2 * 16 + 32)
        SET @n2 = ASCII(@FStr2) ^ ASCII(@FStr1)
        SET @n2 = (@n2 & 0x0F) + 0x20
        SET @FStr2 =CHAR(@n2)
        SET @FStr3 = CHAR(ASCII(@Fchar1) + ((ASCII(@FStr3) + ASCII(@Fchar1)) % 16))
        SET @Result = SUBSTRING(@Result,1, @i-1) + @FStr2 + Substring(@Result,@i + 1, 31 - @i+1)
        SET @Result = Substring(@Result,1, 28 + @i-1) + @FStr3 + Substring(@Result,29 + @i, 3 - @i+1)
    END
    ELSE
    BEGIN
        SET @FStr1 = SUBSTRING(@userPwd,@i,1)
        SET @FStr2 = SUBSTRING(@Result,@i,1)
        SET @FStr3 = SUBSTRING(@Result,@i-4,1)
        SET @n1 = ((ASCII(SUBSTRING(@userPwd,@i,1)) - 32) % 16)
        SET @n2 = ((ASCII(SUBSTRING(@userPwd,@i,1)) - 32) / 16)
        SET @Fchar1 = CHAR(@n2 * 16 + 32)
        SET @n2 = ASCII(@FStr2) ^ ASCII(@FStr1)
        SET @n2 = (@n2 & 0x0F) + 0x20
        SET @FStr2 =CHAR(@n2)
        SET @FStr3 = CHAR(ASCII(@Fchar1) + ((ASCII(@FStr3) + ASCII(@Fchar1)) % 16))
        SET @Result = SUBSTRING(@Result,1, @i-1) + @FStr2 + Substring(@Result,@i + 1, 31 - @i+1)
        SET @Result = Substring(@Result,1, @i-4-1) + @FStr3 + Substring(@Result,@i-3, 35 - @i+1)
    END
    SET @i = @i+1
    
END
RETURN @Result
END

GO


 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值