通过数据库找回sha1加密的纯数字密码的研究

本文介绍了如何在SQLSERVER中通过遍历方式找回使用SHA1 Unicode编码加密的纯数字密码。通过创建存储过程cq_get_pwd,演示了针对不同长度数字密码的试探过程,帮助理解SQLSERVER的加密函数并解决忘记系统密码的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*测试寻找123的铭文,

  1. sha1 unicode 编码下的加密方式

  2. 写一个存储过程,存储过程功能主要是通过遍历方式,找回纯数字密码的铭文,如果数据库中已知加密后的密文

  3. 其他加密方式可以参考,目前只支持纯数字的密码的找回

  4. 适用场景是客户忘记系统密码,且知道加密方式sha1,unicode字符下的加密,可以找回密码铭文

  5. 代码来源,有个网友的系统管理员密码忘了,知道某个用户的密码铭文和密文,实际数据 密码铭文 123 ,密码密文:0x0D5399508427CE79556CDA71918020C1E8D15B53,网友提供的信息是他们系统比较小,应该是常见的加密方式,我通过尝试几种加密函数后试到加密方式是unicode 下的sha1加密

  6. 文章意义,通过这篇文章加深对SQLSERVER 加密函数的熟悉程度,如果能够尝试解决简单系统的加密一题最好

  7. 函数的定义 HASHBYTES ( ‘’, { @input | ‘input’ } )
    ::= MD2 | MD4 | MD5 | SHA | SHA1 | SHA2_256 | SHA2_512
    函数的举例:注意varchar和Nvarchar编码格式下的123 加密后的密文不一样
    select HashBytes(‘MD2’,‘123’)
    select HashBytes(‘MD2’,N’123’)
    select HashBytes(‘MD4’,‘123’)
    select HashBytes(‘MD4’,N’123’)
    select HashBytes(‘MD5’,‘123’)
    select HashBytes(‘MD5’,N’123’)
    select HashBytes(‘sha’,‘123’)
    select HashBytes(‘sha’,N’123’)
    select HashBytes(‘sha1’,‘123’)
    select HashBytes(‘sha1’,N’123’)
    select HashBytes(‘SHA2_256’,‘123’)
    select HashBytes(‘SHA2_256’,N’123’)
    select HashBytes(‘SHA2_512’,‘123’)
    select HashBytes(‘SHA2_512’,N’123’)

  8. 如果有疑问请联系楼主,qq-2625526306

– 123 exec cq_get_pwd ‘’,0x0D5399508427CE79556CDA71918020C1E8D15B53
exec cq_get_pwd ‘’, 0xC1B5169AFDBA194475172B8517C718857D1C0A11
*/
create proc cq_get_pwd
(@pdw_form varchar(20)=’’,–如果已知加密方式
@password varbinary(100)=0x0D5399508427CE79556CDA71918020C1E8D15B53 --sha1 ,unicode编码下的123的密文
)
as
begin
–select len(HashBytes(‘sha1’,N’123’))
–select HashBytes(‘sha1’,N’123’)
–第一种场景 如果密码是纯数字
–从10个数字里面做排列
–任意长度,长度从1开始,试到8位数字为准
–循环9次,@i=0 第一次代表空字符试探,@i=1 代表密码只有一位的试探,依次类推
–从0开始试探
–select pwd from pwd_digit(nolock) where len(pwd) in(6,3)
declare @sql varchar(200),@Viewpassword nvarchar(20)=N’123’,@i tinyint =0,–@password varbinary(100)=0x0D5399508427CE79556CDA71918020C1E8D15B53,
@pwd_tmp varchar(100)=’’
–select HashBytes(‘sha1’,@Viewpassword)
declare @j int=0
declare @k int =0
declare @l int =0
declare @m int=0
declare @n int=0
declare @o int =0
declare @p int=0
declare @q int=0
declare @flag int=0
declare @count bigint =0–定义试探次数
while

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值