首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • sql2005解密问题 [已结帖,结帖人:tangserver]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tangserver
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-20 15:10:34 楼主
    我数据库中的密码是通过EncryptByPassPhrase加密的,显示的都是2进制数据
    现在我不会解密怎么办?
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wufeng4552
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 15:26:411楼 得分:10
    如果对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)           
    这样我们就可以使用这两个函数来加密自己的密码了:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tangserver
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:23:502楼 得分:0
    我要解密阿,加密已经做了我想知道具体用decryptbypassphrase怎么解密
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • M1CR0S0FT
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-20 16:27:073楼 得分:10
    DecryptByPassPhrase (
                          { 'passphrase' | @passphrase }
                                                  , { 'ciphertext' | @ciphertext }
                          [
                                                        , { add_authenticator | @add_authenticator }
                                                        , { authenticator | @authenticator }
                          ]                 
                                            )


    参数
    passphrase
    将用于生成解密密钥的通行短语。

    @passphrase
    类型为 nvarchar、char、varchar 或 nchar 的变量,其中包含将用来生成解密密钥的通行短语。

    'ciphertext'
    要解密的加密文本。

    @ciphertext
    包含加密文本的 varbinary 类型的变量。最大大小为 8,000 个字节。

    add_authenticator
    指示是否与明文一起加密验证器。如果使用了验证器,则为 1。 int.

    @add_authenticator
    指示是否与明文一起加密验证器。如果使用了验证器,则为 1。 int.

    authenticator
    这是验证器数据。 sysname.

    @authenticator
    包含用于派生验证器的数据的变量。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-21 00:32:064楼 得分:10
    用解密函数转换回来就可以了,.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hery2002
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 2

      2

    发表于:2008-08-21 00:33:135楼 得分:10
    http://blog.csdn.net/huangya0/archive/2008/06/13/2543900.aspx
    SQL code
    USE [TestDB] GO /****** Object: Table [dbo].[Customer] Script Date: 05/05/2008 13:14:36 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Customer]( [CustomerID] [int] NULL, [Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, [City] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL, [CreditCardType] [varbinary](max) NULL, [CreditCardNumber] [varbinary](max) NULL, [Notes] [varbinary](max) NULL, [Descr] [varchar](max) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF 2. 建master key和证书use TestDB CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'abcd1234'; GO CREATE CERTIFICATE User2Certificate AUTHORIZATION ODMSDB_User_Name WITH SUBJECT = 'ODMS DB testing', START_DATE = '10/31/2007', EXPIRY_DATE = '10/31/2017'; GO --若要将已创建的证书授予其它用户,用下边的语句 ALTER AUTHORIZATION ON Certificate::User2Certificate TO user1; GO 3. 建function --加密的: create FUNCTION [dbo].[fn_Encrypt] ( @plaintxt Varchar(max), @token varchar(100) ) RETURNS varbinary(max)--因为EncryptByCert方法返回的是varbinary AS BEGIN declare @returnVal varbinary(max) set @returnVal = EncryptByCert(Cert_ID(@token), @plaintxt) return @returnVal END --解密的: create FUNCTION [dbo].[fn_Decrypt] ( @plaintxt varbinary(max),--保存值的字段一般定度成varbinary类型 @token varchar(100) ) RETURNS Varchar(max) AS BEGIN declare @returnVal Varchar(max) set @returnVal = CONVERT(VARCHAR, DecryptByCert(Cert_ID(@token), @plaintxt) ) return @returnVal END 4. 使用加密方法插入数据 INSERT INTO Customer VALUES (12, 'John Doe', 'Fairbanks', --EncryptByAsymKey(AsymKey_ID(@CertName), @Column2Value) --EncryptByCert(Cert_ID('User2Certificate'), 'HuangYao'), dbo.fn_Encrypt('HuangYao2258', 'User2Certificate'), EncryptByCert(Cert_ID('User2Certificate'), '1234-5678-9009-8765'), EncryptByCert(Cert_ID('User2Certificate'), '黄黃楊杨shopper. Spends $5 at most.'), dbo.fn_EnDecrypt('HuangYao2258-----huangyao testing,25rsheahehdahtrehj42jdahet', 'User2Certificate', 0)) select * FROM Customer WHERE CustomerID = 12 5. 使用 SELECT CustomerID, Name, City, --CONVERT(nvarchar(100), DecryptByAsymKey(AsymKey_Id(@KeyName), Column2Name, @DecryptToken)) AS ColumnAlias --CONVERT(VARCHAR, DecryptByCert(Cert_ID('User2Certificate'), CreditCardType)) AS CardType, dbo.fn_Decrypt(CreditCardType, 'User2Certificate') AS CardType, CONVERT(VARCHAR, DecryptByCert(Cert_ID('User2Certificate'), CreditCardNumber) ) AS CardNumber, CONVERT(VARCHAR, DecryptByCert(Cert_ID('User2Certificate'), Notes) ) AS Notes, dbo.fn_EnDecrypt(Descr, 'User2Certificate', 1) as Descr FROM Customer WHERE CustomerID = 12
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • JYR520
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 07:43:066楼 得分:5
    呵呵,支持一下,学习中
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • CodeShow
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-21 09:33:067楼 得分:5
    引用 3 楼 M1CR0S0FT 的回复:
    DecryptByPassPhrase (
                          { 'passphrase' ¦ @passphrase }
                                                  , { 'ciphertext' ¦ @ciphertext }
                          [
                                                        , { add_authenticator ¦ @add_authenticator }
                                                        , { authenticator ¦ @authenticator }
                          …

    这个老兄的ID够NB的!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved