[易飞]密码加密解密函数

Sql Server
专注微软数据库技术:安全管理,存储过程,函数,游标,视图,T-SQL,算法等。
厦门德仔

 加密函数:

CREATE FUNCTION EncodePwd
( 
@user nvarchar(32), 
@userPwd nvarchar(32)
)
RETURNS nvarchar(128)
AS
BEGIN
DECLARE @fnil nvarchar(128),@FF1 NVARCHAR(128)
SET @fnil = '''(&.&!''%&{1}quot;''&)" ",&)$(%#$-$#$" '
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 

解密函数:

ALTER 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 = '''(&.&!''%&{1}quot;''&)" ",&)$(%#$-$#$" '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-1WHILE(@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 

展开阅读全文

Git 实用技巧

11-24
这几年越来越多的开发团队使用了Git,掌握Git的使用已经越来越重要,已经是一个开发者必备的一项技能;但很多人在刚开始学习Git的时候会遇到很多疑问,比如之前使用过SVN的开发者想不通Git提交代码为什么需要先commit然后再去push,而不是一条命令一次性搞定; 更多的开发者对Git已经入门,不过在遇到一些代码冲突、需要恢复Git代码时候就不知所措,这个时候哪些对 Git掌握得比较好的少数人,就像团队中的神一样,在队友遇到 Git 相关的问题的时候用各种流利的操作来帮助队友于水火。 我去年刚加入新团队,发现一些同事对Git的常规操作没太大问题,但对Git的理解还是比较生疏,比如说分支和分支之间的关联关系、合并代码时候的冲突解决、提交代码前未拉取新代码导致冲突问题的处理等,我在协助处理这些问题的时候也记录各种问题的解决办法,希望整理后通过教程帮助到更多对Git操作进阶的开发者。 本期教程学习方法分为“掌握基础——稳步进阶——熟悉协作”三个层次。从掌握基础的 Git的推送和拉取开始,以案例进行演示,分析每一个步骤的操作方式和原理,从理解Git 工具的操作到学会代码存储结构、演示不同场景下Git遇到问题的不同处理方案。循序渐进让同学们掌握Git工具在团队协作中的整体协作流程。 在教程中会通过大量案例进行分析,案例会模拟在工作中遇到的问题,从最基础的代码提交和拉取、代码冲突解决、代码仓库的数据维护、Git服务端搭建等。为了让同学们容易理解,对Git简单易懂,文章中详细记录了详细的操作步骤,提供大量演示截图和解析。在教程的最后部分,会从提升团队整体效率的角度对Git工具进行讲解,包括规范操作、Gitlab的搭建、钩子事件的应用等。 为了让同学们可以利用碎片化时间来灵活学习,在教程文章中大程度降低了上下文的依赖,让大家可以在工作之余进行学习与实战,并同时掌握里面涉及的Git不常见操作的相关知识,理解Git工具在工作遇到的问题解决思路和方法,相信一定会对大家的前端技能进阶大有帮助。
©️2020 CSDN 皮肤主题: 鲸 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值