高分求一个sql写的des加密算法存储过程,分不够再加。用于 sql server

Risk_lee 2010-04-27 08:32:57
高分求一个sql写的des加密算法存储过程,分不够再加。用于 sql server
...全文
143 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
是啊,为什么要在SQL里面写啊,这样不是搞复杂了吗
Risk_lee 2010-04-28
  • 打赏
  • 举报
回复
暂不结贴,看看还有没有更好的答案。有兴趣的人也可以发表不同的意见.
Risk_lee 2010-04-28
  • 打赏
  • 举报
回复
hongqi162,厉害。这样的好东西,你应该开博传授,不应该独自享用
hongqi162 2010-04-28
  • 打赏
  • 举报
回复
SET QUOTED_IDENTIFIER ON 

GO

SET ANSI_NULLS ON

GO



if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fn_PwdCrypt]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[fn_PwdCrypt]

GO



CREATE FUNCTION dbo.fn_PwdCrypt(@ptSource varchar(255), @ptPassword varchar(255))



RETURNS varbinary(64)

BEGIN



DECLARE @tdest varchar(255),

@lteller int,

@lPasswTeller int,

@cnt int,

@len int,

@tFinal varbinary(64)



SELECT @tFinal = Convert(varbinary(64),'')

SELECT @len = Len(@ptSource)

SELECT @lteller = 1

SELECT @tdest = @ptSource

SELECT @lPasswTeller = 0



WHILE @lteller <= @len

BEGIN

SELECT @lPasswTeller = @lPasswTeller - 1

If @lPasswTeller < 1

SELECT @lPasswTeller = Len(@ptPassword)



SELECT @tfinal = @tfinal + Convert(varbinary(64),Stuff(Substring(@tdest, @lteller, 1),1,Len( Char(Ascii(Substring(@ptSource, @lteller, 1)) ^ Ascii(Substring(@ptPassword, @lPasswTeller, 1)))), Char(Ascii(Substring(@ptSource, @lteller, 1)) ^ Ascii(Substring(@ptPassword, @lPasswTeller, 1))) ) )

SELECT @lteller = @lteller + 1

END

RETURN @tfinal







END



GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO



SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO



if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fn_PwdDeCrypt]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[fn_PwdDeCrypt]

GO



CREATE FUNCTION dbo.fn_PwdDeCrypt(@ptSource varchar(255), @ptPassword varchar(255))



RETURNS varchar(255)

BEGIN



DECLARE @tdest varchar(255),

@lteller int,

@lPasswTeller int,

@cnt int,

@len int,

@tFinal varchar(255)



SELECT @tFinal = ''

SELECT @len = Len(@ptSource)

SELECT @lteller = 1

SELECT @tdest = @ptSource

SELECT @lPasswTeller = 0



WHILE @lteller <= @len

BEGIN

SELECT @lPasswTeller = @lPasswTeller - 1

If @lPasswTeller < 1

SELECT @lPasswTeller = Len(@ptPassword)



SELECT @tfinal = @tfinal + Left(Stuff(substring(@tdest, @lteller, 1),1,Len( Char(Ascii(substring(@ptSource, @lteller, 1)) ^ Ascii(Substring(@ptPassword, @lPasswTeller, 1)))), Char(Ascii(Substring(@ptSource, @lteller, 1)) ^ Ascii(Substring(@ptPassword, @lPasswTeller, 1))) ), 1)

SELECT @lteller = @lteller+1

END

RETURN @tfinal



END



GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO



--Test it here

create table #temp

( pwd varbinary(64))



insert into #temp (pwd)

select dbo.fn_PwdCrypt ('MyPassword','secret')



select pwd from #temp

select dbo.fn_PwdDeCrypt (pwd,'secret') from #temp

drop table #temp




DES Encryption/Decryption Function
liangpei2008 2010-04-28
  • 打赏
  • 举报
回复

1.用Delphi写一个MSSQL可识别的dll
2.在MSSQL中挂接
Risk_lee 2010-04-28
  • 打赏
  • 举报
回复
上面的打错字了
这个为准
----------------------------------

随机生成一个密匙B
对密匙B加密
假设B为:000,使用固定密匙'999'des加密得到B'

现在利用B作为密匙对需要传输的重要数据A进行des加密
假设A为:1111111,使用密匙B加密得到A'

密匙B和重要数据A都加密后,才返回给客户端
那么客户端接收到的数据就是A'和B'
由于B是随机生成的,所以B'每次都不一样
B每次不一样,那么A'也每次不一样

---------------
客户端还原过程:
B'利用固定密匙'999'还原成B
A'利用B再还原成A
Risk_lee 2010-04-28
  • 打赏
  • 举报
回复
程序里面,服务器里面都要写。防止别人直接监听获取我的明文。
这个算法的用途是用作软件使用权的网络验证,防爆破组成的一部分。

顺便说下我的做法,看看大家有什么可以指点的,欢迎扔砖头
随机生成一个密匙B
对密匙B加密
假设B为:000,使用固定密匙'999'des加密得到B'

现在利用B'作为密匙对需要传输的重要数据A进行des加密
假设A为:1111111,使用密匙B'加密得到A'

密匙B和重要数据A都加密后,才返回给客户端
那么客户端接收到的数据就是A'和B'
由于B是随机生成的,所以B'每次都不一样
B'每次不一样,那么A'也每次不一样
这样爆破手每次捕捉到的数据都不一样,会增加他的爆破难度

IDWB 2010-04-27
  • 打赏
  • 举报
回复
为什么非要在sql里面写,程序里面写减少服务器负担

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧