未公开的SQL Server口令的加密函数

如果对MSSQL的用户信息有兴趣的,可能会发现master.dbo.sysxlogins里面存放着用户的口令,可是呢,password字段如果不是null就是一堆看不懂的binary,这个口令是怎么加密的呢?

  其实只要仔细看看master.dbo.sp_addlogin就知道了,MSSQL的sp都可以看到代码,真是不错。

  让我们来看看它是怎么做的,注意这一行select @passwd = pwdencrypt(@passwd),这个时后@passwd就被加密了,让我们也来试一下

  DECLARE @ClearPWD varchar(255) 

  DECLARE @EncryptedPWD varbinary(255)

  SELECT @ClearPWD = 'test'

  SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))

  SELECT @EncryptedPWD

  看上去不错,确实被加密了,可是我怎么还原呢?

  

  口令加密都是单向的,用加密后的密文来比较就可以了。

  继续看看其它用户相关的sp,可以发现master.dbo.sp_password里面有口令比较的内容。

  pwdcompare(@old, password, (CASE WHEN xstatus&2048 = 2048 THEN 1 ELSE 0 END))

  不用去理会xstatus,这是一个状态掩码,一般我们用的时候就直接用0就可以了

  DECLARE @ClearPWD varchar(255) 

  DECLARE @EncryptedPWD varbinary(255)

  SELECT @ClearPWD = 'test'

  SELECT @EncryptedPWD = CONVERT(varbinary(255), pwdencrypt(@ClearPWD))

  SELECT pwdcompare(@ClearPWD, @EncryptedPWD, 0)

  SELECT pwdcompare('ErrorPassword', @EncryptedPWD, 0)

  这样我们就可以使用这两个函数来加密自己的密码了

时间: 2024-10-26 20:45:14

未公开的SQL Server口令的加密函数的相关文章

未公开的SQL Server口令的加密函数_MsSql

如果对MSSQL的用户信息有兴趣的,可能会发现master.dbo.sysxlogins里面存放着用户的口令,可是呢,password字段如果不是null就是一堆看不懂的binary,这个口令是怎么加密的呢? 其实只要仔细看看master.dbo.sp_addlogin就知道了,MSSQL的sp都可以看到代码,真是不错. 让我们来看看它是怎么做的,注意这一行select @passwd = pwdencrypt(@passwd),这个时后@passwd就被加密了,让我们也来试一下 DECLARE

用户 'sa' 登录失败。原因: 未与信任 SQL Server 连接 的解决方法

用户 'sa' 登录失败.原因: 未与信任 SQL Server 连接 的解决方法如下: 一.控制面板->服务->MS SQL SERVER->登陆-->本地系统帐户-->重新启动MS SQL SERVER用windows验证登陆查询分析器-->执行 sp_password null,sa新密码,'sa' 二."无法连接到服务器,用户xxx登陆失败"该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方

msde 15457错误与 sa登录失败,未与信任sql server 连接相关联

今天在机器上安装msde里在日志里看到错误: 15457,严重度: 0,状态: 1 以为安装失败,结果在服务里一看,服务是启动成功的但是用查询分析器连接不上 结果打开服务器网络实用工具,将tcp/ip加入到启动的库中,这样,用查询分析器就可以连接过去了但是不能用sa用户名与密码登录,出现错误sa登录失败,未与信任sql server 连接相关联 在网上搜索了一下,原来是服务器被配置成了windows登录,而不是混合登录打开企业管理器--右键服务器实例--编辑SQL Server注册属性--选择"

SQL Server Date DATENAME GetDate函数

SQL Server Date  DATENAME  GetDate函数 GetDate()函数实例 您可以在SQL Server 2005的使用者自订函数(UDFs:User Defined Functions)中呼叫使用GetDate() 函数,下列这个范例程序即是一例:   -- 建立一个 UDF now() CREATE FUNCTION dbo.now() RETURNS DATETIME AS BEGIN   RETURN (GETDATE()); END; GO   -- 测试看看

SQL Server 进制转换函数

原文:SQL Server 进制转换函数 一.背景 前段时间群里的朋友问了一个问题:"在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0-9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下面的映射表": (Figure1:效果图)   二.十进制转换为十六进制 在网上有很多资料关于使用SQL语句把十进制转换为十六进制的资料,比如: --方式1 SELECT CONVERT(VARBINARY(50), 23785) 执行返回值为0x

SQL Server 自定义字符串分割函数

原文:SQL Server 自定义字符串分割函数 一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果(标量值函数)   1 create function Func_StrArrayLength 2 ( 3 @str varchar(1024), --要分割的字符串 4 @split varchar(10) --分隔符号 5 ) 6 returns int 7 as 8 begin 9 declare @location in

SQL Server口令密码对照表

server SQL Server在1433端口传输的数据大部分是明文的,这包括IP地址,连接用户名,成功和失败消息 这样一来,就很容易使用嗅探器嗅探在这个网段内SQL Server的相关信息,得到用户名和IP后,就 差口令了,其实SQL的口令加密是十分脆弱的,昨天我用了半小时,整理了一份口令字符对照表,在 分析SQL Server加密口令的时候,同时发现了SQL Server一个不大不小的BUG----如果你用";"做口令 将导致口令失效,原因是SQL Server的口令对照表中,没

SQL Server口令 sql server安全性第1/2页_MsSql

如果你细心跟踪一下SQL Server数据库服务器的登录过程,你会发现口令计算其实是非常脆弱的,SQL Server数据库的口令脆弱体现两方面:1.网络登陆时候的口令加密算法  2.数据库存储的口令加密算法.  下面就分别讲述:  1.网络登陆时候的口令加密算法  SQL Server网络加密的口令一直都非常脆弱,网上有很多写出来的对照表,但是都没有具体的算法处理,实际上跟踪一下SQL Server的登陆过程,就很容易获取其解密的算法:好吧,我们还是演示一下汇编流程:  登录类型的TDS包跳转到

SQL Server储过程加密和解密原理深入分析_mssql2008

开始: -------------------------------------------------------------------------------- 在网络上,看到有SQL Server 2000和SQL Server 2005 的存储过程加密和解密的方法,后来分析了其中的代码,发现它们的原理都是一样的.后来自己根据实际的应用环境,编写了两个存储过程,一个加密存储过程(sp_EncryptObject),和一个解密存储过程(sp_EncryptObject),它们可以应用于S