拼吾爱程序人生

首页 » 数据库编程 » SQL Server » 如何运用MSSQL sp自制未公开的加密函数
SystemPoster - 2007-8-6 17:35:00
问:Microsoft 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&;amp;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)
 
 





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

 您可能对 [SQL Server] 的这些文章也感兴趣:

解析SQL Server 2000的“设备激活错误”
教你轻松恢复/修复SQL Server的MDF文件
如何优化SQL Server数据库查询
Web环境下SQL Server中数据的磁带备份与恢复
影响SQL server性能的三个关键
用SQL Server保持会话状态
Sql Server配置SQL邮件功能
Sql Server调用C#编写的DLL
在SQL Server 2005中构造模糊查找包
SQL Server 2005中数据库镜像的四个问题
检测你的SQL Server是否有特洛伊木马
几条相对于SQL Server密码的潜威胁判断
1
查看完整版本: 如何运用MSSQL sp自制未公开的加密函数
Modify by pin5i DZNT_ExpandPackage 2.1.3295 2007-2009 pin5i.com
 Total Unique Visitors: