drf算法
1. 请问魔方爱好者们,有人研究3阶最少步数么怎么计算呢
魔方还原,又称“魔方复原”。狭义的还原是指魔方从非原始状态到原始状态的过程,即把一个打乱了的魔方还原为六面的各面颜色一致或图案正确。而广义的还原,包括中心块还原、克隆魔方、花样魔方等特殊还原。
“七步进阶法”是一种狭义的还原方法,即:分七步将打乱了的魔方还原为原始状态——六个面的各面颜色一致。
魔方的基本概念
为了便于描述魔方套路,我们需要熟悉魔方的一些基本概念——面、角、棱、心,面位、到位、归位。
第一,魔方的六个面:
蓝、橙、黄、绿、红、白色面就是魔方的六个面。
我们将面向操作者的面称为“前(F)”;其他以此相对应的位置称为“右(R)、顶(U)、后(B)、左(L)、底(D)”,
旋转前魔方的蓝、橙、黄这三个直接可见的面,和三个不能直接看到的绿、红、白色面。
第二,魔方的各类方块:
其中8 个有三面色块的魔方块,叫做“角”。
其中12 个有两面色块的魔方块,叫做“棱”。
另外,我们把每面的中间只有一个色块的魔方块,叫做“心”。
好了,我们已经初了解了魔方各类方块——“角”、“棱”、“心”的初步概念。
第三,魔方各方位角的名称:
很显然,8 个角处在不同的方位。
我们把在顶面上的 4 个角分别称为:上左前角(ULF)、上左后角(ULB)、上右后角(URB)和上右前角(URF);
同理,底面的 4 个角分别为:下左前角(DLF)、下左后角(DLB)、下右后角(DRB)和下右前角(DRF)。
第四,魔方各方位棱的名称:
同样,12个棱也处在不同的方位。
为了表述方便,我们把顶面上的 4 个棱分别称为:上前棱(UF)、上左棱(UL)、上后棱(UB)和上右棱(UR);
同理,在底面的四个棱为:下前棱(DF)、下左棱(DL)、下后棱(DB)和下右棱(DR);
中间的四个棱为:前左棱(FL)、前右棱(FR)、后左棱(BL)、后右棱(BR)。
第五,魔方角和棱的面位、到位和归位:
很显然,魔方向外的 26 个块都是可转动的。
魔方的角与棱,不仅可通过旋扭产生位置的变化,同时还会在旋扭时自转或自翻,发生方向的变化。
对于图形魔方来说,“心”因自转产生了方向的变化,也是还原魔方时要解决的问题。六面色的魔方由于同一面为同一色,因此不用考虑“心”的问题。
如果魔方块只有一面的颜色与“心”的颜色相同,而其他颜色和方向还不正确的,称为“面位”。
如果魔方块只是位置正确但色面方向还不正确的,称为“到位”。即棱的两个面或角的三个面的颜色,与对应的面的颜色相同,但由于错位而没有一一对齐。
如果魔方块位置与方向均正确,称为“归位”,简称“归”。即棱的两个面或角的三个面的颜色,均对应中心面的颜色,它是魔方块还原后的状态。
“面位”、“到位”与“归位”的概念可不要搞混了,对魔方还原来说,这三者是有本质区别的。
魔方棱和角的面位、到位与归位是还原魔方的阶段性目标。
七步进阶法
底棱归位 → 底角归位 → 中棱归位 → 顶棱面位 → 顶棱归位 → 顶角面位 → 顶角归位
2. 为什么EFS只对NTFS格式文件加密是微软有技术难题吗
EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持).
EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件.
它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等)
EFS是如何工作的
当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。
一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:
第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。
第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。
第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK.
第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK.
第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。
第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。
第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的.
第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。
加密过程图片可参考 http://www.ntfs.com/images/encryption.gif
文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后用这些用户的公有密匙加密FEK,新增加的DDF和第一个DDF放在一起(这些新增加的用户对文件只有访问的权力).
解密的过程和加密的过程是相反的,参考http://www.ntfs.com/images/decryption.gif
3. 怎么打开EFS文件
EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持).
EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件.
它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等)
EFS是如何工作的
当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。
一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:
第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。
第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。
第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK.
第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK.
第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。
第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。
第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的.
第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。
加密过程图片可参考 http://www.ntfs.com/images/encryption.gif
文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后用这些用户的公有密匙加密FEK,新增加的DDF和第一个DDF放在一起(这些新增加的用户对文件只有访问的权力).
解密的过程和加密的过程是相反的,参考http://www.ntfs.com/images/decryption.gif
首先,系统检测用户是否具有被EFS使用的私有密匙.如果有的话,系统将会在读取EFS属性,同时在DDF对列中寻找当前用户的DDF.如果DDF找到的话,用户私有密匙将会在那里解密出FEK.使用解密出来的FEK,EFS去解密加密的文件数据.需要注意的是文件从来不会完全被加密,但是有时候会去加密一些特殊的扇区如果上层模块要求的话.
EFS组成
EFS由EFS服务、EFS驱动、EFS文件系统运行库(FSRTL)和Win32 API。EFS服务作为一个标准系统服务运行,它是Windows 2000安全子系统的一部分。它与CryptoAPI接口产生钥匙、DDF和DRF,EFS驱动就象是NTFS的一部分,它呼叫EFS服务请求钥匙,DDF和DRF作为需要被创建,一个EFS驱动的组成是EFS FSRTL,它定义了EFS驱动程序能作为NTFS的代表而执行的功能。
EFS和NTFS如何共存
EFS可以被认为除NTFS外的第二层防护,为访问一个被加密的文件,用户必须有访问到文件的NTFS权限。在相关NTFS权限的用户能看到文件夹中的文件,但不能打开文件除非有相应的解密钥匙。同样,一个用户有相应的钥匙但没有相应的NTFS权限也不能访问到文件。所以一个用户要能打开加密的文件,同时需要NTFS权限和解密钥匙。
然而,NTFS权限可能被大量的方法穿越,包括口令破解程序、用户在离开前没有退出系统或系统内部的NTFSDOS。在NT4.0下,游戏结束了――硬盘上所有的数据都可以访问了。在Windows 2000下,当一个文件用EFS加密后,一个未授权的用户,即使访问到磁盘上的文件,但也不能访问文件上数据,因为没有授权用户的私钥。
EFS 属性
当NTFS加密文件的时候,它首先会为文件设置加密标志,然后在存储DDF和DDR的地方为文件创建一个$EFS属性.这个属性的属性ID=0x100,它可以被加长,占有0.5k到若干k的大小,这个大小是由DDF和DRF的数量决定的.
http://www.ntfs.com/images/efs_header.gif
下面是一个详细的EFS属性的例子.
http://www.raid1.cn/efs/pic/attribute/EFS_example.gif
紫色:EFS属性大小
天蓝色:电脑安全标识符和用户数字.它指定EFS存储证书的文件夹.为了得到文件
夹的名字,EFS会做一些转换.
5A56B378 1C365429 A851FF09 D040000 - 存储在$EFS中的数据.
78B3565A 2954361C 09FF15A8 000004D0 - 转换后的结果.
2025018970-693384732-167712168-1232 - 转换成十进制.
S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全标识符前缀.
得到的文件夹就是:
%UserProfile%\ApplicationData\Microsoft\Crypto\RSA\S-1-5-21-2025018970-693384732167712168-1232\
粉红色:公有密匙特性
黄色:私有密匙全局唯一标识符(同时被当作容器名字).当EFS从CryptoAPI provider中获取设备环境的时候使用这个名字.如果$EFS属性只有一个DDF,容器的名字可以从$efs中计算出来.但是当更多的用户加入这个文件的时候(就会有更多的DDF和DRF),私有密匙全局唯一标识符并不是保存所有的用户,其它的必须从基于公有密匙存储特性的证书中恢复.
红色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)
绿色:用户的名称,DDF和DRF的所有者.
蓝色:加密后的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密后,长度变成1024位.
4. 文件被权限限制,怎么办
你这个问题很麻烦的,以下资料给你参考一下吧.祝你好运!
EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持).
EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件.
它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等)
EFS是如何工作的
当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。
一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:
第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。
第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。
第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK.
第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK.
第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。
第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。
第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的.
第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。
文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后用这些用户的公有密匙加密FEK,新增加的DDF和第一个DDF放在一起(这些新增加的用户对文件只有访问的权力).
解密的过程和加密的过程是相反的,参考http://www.ntfs.com/images/decryption.gif
首先,系统检测用户是否具有被EFS使用的私有密匙.如果有的话,系统将会在读取EFS属性,同时在DDF对列中寻找当前用户的DDF.如果DDF找到的话,用户私有密匙将会在那里解密出FEK.使用解密出来的FEK,EFS去解密加密的文件数据.需要注意的是文件从来不会完全被加密,但是有时候会去加密一些特殊的扇区如果上层模块要求的话.
EFS组成
EFS由EFS服务、EFS驱动、EFS文件系统运行库(FSRTL)和Win32 API。EFS服务作为一个标准系统服务运行,它是Windows 2000安全子系统的一部分。它与CryptoAPI接口产生钥匙、DDF和DRF,EFS驱动就象是NTFS的一部分,它呼叫EFS服务请求钥匙,DDF和DRF作为需要被创建,一个EFS驱动的组成是EFS FSRTL,它定义了EFS驱动程序能作为NTFS的代表而执行的功能。
EFS和NTFS如何共存
EFS可以被认为除NTFS外的第二层防护,为访问一个被加密的文件,用户必须有访问到文件的NTFS权限。在相关NTFS权限的用户能看到文件夹中的文件,但不能打开文件除非有相应的解密钥匙。同样,一个用户有相应的钥匙但没有相应的NTFS权限也不能访问到文件。所以一个用户要能打开加密的文件,同时需要NTFS权限和解密钥匙。
然而,NTFS权限可能被大量的方法穿越,包括口令破解程序、用户在离开前没有退出系统或系统内部的NTFSDOS。在NT4.0下,游戏结束了――硬盘上所有的数据都可以访问了。在Windows 2000下,当一个文件用EFS加密后,一个未授权的用户,即使访问到磁盘上的文件,但也不能访问文件上数据,因为没有授权用户的私钥。
EFS 属性
当NTFS加密文件的时候,它首先会为文件设置加密标志,然后在存储DDF和DDR的地方为文件创建一个$EFS属性.这个属性的属性ID=0x100,它可以被加长,占有0.5k到若干k的大小,这个大小是由DDF和DRF的数量决定的.
http://www.ntfs.com/images/efs_header.gif
下面是一个详细的EFS属性的例子.
http://www.raid1.cn/efs/pic/attribute/EFS_example.gif
紫色:EFS属性大小
天蓝色:电脑安全标识符和用户数字.它指定EFS存储证书的文件夹.为了得到文件
夹的名字,EFS会做一些转换.
5A56B378 1C365429 A851FF09 D040000 - 存储在$EFS中的数据.
78B3565A 2954361C 09FF15A8 000004D0 - 转换后的结果.
2025018970-693384732-167712168-1232 - 转换成十进制.
S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全标识符前缀.
得到的文件夹就是:
%UserProfile%\ApplicationData\Microsoft\Crypto\RSA\S-1-5-21-2025018970-693384732167712168-1232\
粉红色:公有密匙特性
黄色:私有密匙全局唯一标识符(同时被当作容器名字).当EFS从CryptoAPI provider中获取设备环境的时候使用这个名字.如果$EFS属性只有一个DDF,容器的名字可以从$efs中计算出来.但是当更多的用户加入这个文件的时候(就会有更多的DDF和DRF),私有密匙全局唯一标识符并不是保存所有的用户,其它的必须从基于公有密匙存储特性的证书中恢复.
红色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)
绿色:用户的名称,DDF和DRF的所有者.
蓝色:加密后的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密后,长度变成1024位.
5. NTFS的权限设置与加密之间的关系
EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持).
EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件.
它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等)
EFS是如何工作的
当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。
一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:
第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。
第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。
第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK.
第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK.
第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。
第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。
第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的.
第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。
加密过程图片可参考 http://www.ntfs.com/images/encryption.gif" http://www.ntfs.com/images/encryption.gif
文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后用这些用户的公有密匙加密FEK,新增加的DDF和第一个DDF放在一起(这些新增加的用户对文件只有访问的权力).
解密的过程和加密的过程是相反的,参考http://www.ntfs.com/images/decryption.gif" http://www.ntfs.com/images/decryption.gif
首先,系统检测用户是否具有被EFS使用的私有密匙.如果有的话,系统将会在读取EFS属性,同时在DDF对列中寻找当前用户的DDF.如果DDF找到的话,用户私有密匙将会在那里解密出FEK.使用解密出来的FEK,EFS去解密加密的文件数据.需要注意的是文件从来不会完全被加密,但是有时候会去加密一些特殊的扇区如果上层模块要求的话.
EFS组成
EFS由EFS服务、EFS驱动、EFS文件系统运行库(FSRTL)和Win32 API。EFS服务作为一个标准系统服务运行,它是Windows 2000安全子系统的一部分。它与CryptoAPI接口产生钥匙、DDF和DRF,EFS驱动就象是NTFS的一部分,它呼叫EFS服务请求钥匙,DDF和DRF作为需要被创建,一个EFS驱动的组成是EFS FSRTL,它定义了EFS驱动程序能作为NTFS的代表而执行的功能。
EFS和NTFS如何共存
EFS可以被认为除NTFS外的第二层防护,为访问一个被加密的文件,用户必须有访问到文件的NTFS权限。在相关NTFS权限的用户能看到文件夹中的文件,但不能打开文件除非有相应的解密钥匙。同样,一个用户有相应的钥匙但没有相应的NTFS权限也不能访问到文件。所以一个用户要能打开加密的文件,同时需要NTFS权限和解密钥匙。
然而,NTFS权限可能被大量的方法穿越,包括口令破解程序、用户在离开前没有退出系统或系统内部的NTFSDOS。在NT4.0下,游戏结束了――硬盘上所有的数据都可以访问了。在Windows 2000下,当一个文件用EFS加密后,一个未授权的用户,即使访问到磁盘上的文件,但也不能访问文件上数据,因为没有授权用户的私钥。
EFS 属性
当NTFS加密文件的时候,它首先会为文件设置加密标志,然后在存储DDF和DDR的地方为文件创建一个$EFS属性.这个属性的属性ID=0x100,它可以被加长,占有0.5k到若干k的大小,这个大小是由DDF和DRF的数量决定的.
http://www.ntfs.com/images/efs_header.gif" http://www.ntfs.com/images/efs_header.gif
下面是一个详细的EFS属性的例子.
http://www.raid1.cn/efs/pic/attribute/EFS_example.gif" http://www.raid1.cn/efs/pic/attribute/EFS_example.gif
紫色:EFS属性大小
天蓝色:电脑安全标识符和用户数字.它指定EFS存储证书的文件夹.为了得到文件
夹的名字,EFS会做一些转换.
5A56B378 1C365429 A851FF09 D040000 - 存储在$EFS中的数据.
78B3565A 2954361C 09FF15A8 000004D0 - 转换后的结果.
2025018970-693384732-167712168-1232 - 转换成十进制.
S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全标识符前缀.
得到的文件夹就是:
%UserProfile%\ApplicationData\Microsoft\Crypto\RSA\S-1-5-21-2025018970-693384732167712168-1232\
粉红色:公有密匙特性
黄色:私有密匙全局唯一标识符(同时被当作容器名字).当EFS从CryptoAPI provider中获取设备环境的时候使用这个名字.如果$EFS属性只有一个DDF,容器的名字可以从$efs中计算出来.但是当更多的用户加入这个文件的时候(就会有更多的DDF和DRF),私有密匙全局唯一标识符并不是保存所有的用户,其它的必须从基于公有密匙存储特性的证书中恢复.
红色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)
绿色:用户的名称,DDF和DRF的所有者.
蓝色:加密后的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密后,长度变成1024位.
6. 单片机pid算法控制步进电机的电路图和程序
//P1.1(T0):Count They Distance
//P0.4:Tx
//P0.5:Rx
#include <C8051F310.h> //SFR declarations
#include <stdio.h> //Standard I/O definition file
#include <math.h> //Math library file
#include <Intrins.h>
#include <absacc.h>
unsigned int j,i;
char a=0;
unsigned int t=0;
//sbit led=P0^2;
//P0.0(PWM0):给定左轮速度.
sbit vls=P0^4; //P0.4(GPIO):给定左轮方向.
sbit vlf=P0^6; //P0.6(T0) :反馈左轮速度.
sbit dlf=P1^0; //P1.0(GPIO):反馈左轮方向.
//P0.2(PWM0):给定右轮速度.
sbit vrs=P0^5; //P0.5(GPIO):给定右轮方向.
sbit vrf=P0^7; //P0.7(T0) :反馈右轮速度.
sbit drf=P1^1; //P1.1(GPIO):反馈右轮方向.
int ol; //左轮给定值
int len;
int len_1,len_2;
int lyn_1,lyn_2;
int vl1,vl2; //反馈左轮速度值(取样周期内的方波数)
int lfz; //运算后赋给PWM的值
int lyn,lynn;
int lun=0,lun_1=0; //偏差校正值 即校正PWM输出
int lunp,luni,lund; //PID 校正值
int or; //右轮给定值
int ren;
int ren_1,ren_2;
int ryn_1,ryn_2;
int vr1,vr2; //反馈右轮速度值(取样周期内的方波数)
int rfz; //运算后赋给PWM的值
int ryn,rynn;
int run=0,run_1=0; //偏差校正值 即校正PWM输出
int runp,runi,rund; //PID 校正值
float kp=2.0; //比例系数1.8
float kd=0.2; //微分系数0.4
float lki; //积分系数
void pio_init(void);
void sys_init(void);
void t01_init(void);
void TIME3_INT(void);
void PID(void);
void interrupt_init(void);
void delay(unsigned int x);
void pwm1_1(void);
void main(void)
{
PCA0MD &= ~0x40; //关闭
pio_init(); //P11为测距输入端
sys_init();
t01_init();
pwm1_1();
TIME3_INT();
interrupt_init();
vls=1;vrs=0;
while(1)
{
ol=50;
or=50;
delay(1000);
ol=100;
or=100;
delay(1000);
ol=-50;
or=50;
delay(1000);
}
}
void PID(void)
{
/****************左轮PID调节******************/
if(dlf==1)
{
lyn=(vl2*256+vl1); //dlf是左轮反馈方向,0表示向前 vl=TL0
}
else
{
lyn=-(vl2*256+vl1); //dlf=1表示是向后退,速度应该为负值
}
len=ol-lyn; //误差=给定速度-反馈速度(取样周期内的方波数)
if(abs(len)<8)//30
{
lki=1.4; //ki值的确定1.4
}
else
{
lki=0.05; //积分系数:如果 | 给定值-反馈值 | 太大
} //则就可以不引入积分,或者引入的很小0.05
lunp=kp*(len-len_1); //比例校正
luni=lki*len; //积分校正
lund=kd*(len-2*len_1+len_2); //微分校正
lun=lunp+luni+lund+lun_1; //总校正
/*************新旧数据更新*************************/
len_2=len_1;
len_1=len; //len:当前取样周期内出现的速度偏差;len_1:上次取样周期内出现的速度偏差
lun_1=lun; //lun:当前取样周期内得出的PWM校正值;lun_1:上次取样周期内得出的PWM校正值
/*************新旧数据更新*************************/
if(lun>255)
{
lun=255; //正速度
}
if(lun<-255)
{
lun=-255; //负速度
}
if(lun<0)
{
vls=1;
PCA0CPH0=-lun;
}
if(lun>=0)
{
vls=0;
PCA0CPH0=lun;
}
/****************右轮PID调节******************/
if(drf==0)
{
ryn=(vr2*256+vr1); //drf是右轮反馈方向,0表示向前 vl=TL0
}
else
{
ryn=-(vr2*256+vr1); //dlf=1表示是向后退,速度应该为负值
}
ren=or-ryn; //误差=给定速度-反馈速度(取样周期内的方波数)
if(abs(ren)<8)//30
{
lki=1.4; //ki值的确定1.4
}
else
{
lki=0.05; //积分系数:如果 | 给定值-反馈值 | 太大
} //则就可以不引入积分,或者引入的很小0.05
runp=kp*(ren-ren_1); //比例校正
runi=lki*ren; //积分校正
rund=kd*(ren-2*ren_1+ren_2); //微分校正
run=runp+runi+rund+run_1; //总校正
/*************新旧数据更新*************************/
ren_2=ren_1;
ren_1=ren; //len:当前取样周期内出现的速度偏差;len_1:上次取样周期内出现的速度偏差
run_1=run; //lun:当前取样周期内得出的PWM校正值;lun_1:上次取样周期内得出的PWM校正值
/*************新旧数据更新*************************/
if(run>255)
{
run=255; //正速度
}
if(run<-255)
{
run=-255; //负速度
}
if(run<0)
{
vrs=1;
PCA0CPH1=-run;
}
if(run>=0)
{
vrs=0;
PCA0CPH1=run;
}
//因为这里的PCA0CPH0越大,对应的电机速度越小,所以要255来减一下
}
void pio_init(void)
{
XBR0=0x00; //0000 0001
XBR1=0x72; //0111 0010 时能弱上拉 T0T1连接到脚口P06、P07 CEX0、CEX1连接到脚口P00、P01
P0MDIN=0xff; //模拟(0);数字(1) 1111 0011
P0MDOUT=0xc3;//开漏(0);推挽(1) 1111 1111
P0SKIP=0x3c; //0011 1100
P1MDIN=0xff; //1111 1111
P1MDOUT=0xfc;//
P1SKIP=0x00; //1111 1111
}
void sys_init(void) //12MHz
{
OSCICL=0x43;
OSCICN=0xc2;
CLKSEL=0x00;
}
void pwm1_1(void) //PWM的初始化
{
PCA0MD=0x08; //PCA时钟为12分频
PCA0CPL0=200; //左轮
PCA0CPM0=0x42; //设置左轮为8位PWM输出
PCA0CPH0=200;
PCA0CPL1=200; //平衡校正
PCA0CPM1=0x42; //设置为8位PWM输出
PCA0CPH1=200;
PCA0CN=0x40; //允许PCA工作
}
void t01_init(void)
{
TCON=0x50; //计数器1、2允许
TMOD=0x55; //定时器1、2采用16位计数功能
CKCON=0x00;
TH1=0x00; //用于采集左轮的速度
TL1=0x00;
TH0=0x00; //用于采集右轮的速度
TL0=0x00;
}
void TIME3_INT(void)
{
TMR3CN = 0x00; //定时器3为16位自动重载
CKCON &= ~0x40;
TMR3RLL = 0xff;
TMR3RLH = 0xd7;
TMR3L = 0xff;
TMR3H = 0xd7;
TMR3CN |= 0x04;
}
void T3_ISR() interrupt 14 //定时器3中断服务程序
{
//led=~led;
EA=0;
TCON &=~0x50; //关闭计数器0、1
vl1=TL0; //取左轮速度值
vl2=TH0;
vr1=TL1; //取右轮速度值
vr2=TH1;
TH1=0x00;
TL1=0x00;
TH0=0x00;
TL0=0x00;
PID(); //PID处理
TMR3CN &=~0x80; //清中断标志位
TCON |=0x50; //重新开计数器0、1
EA=1;
}
void interrupt_init(void)
{ IE=0x80;
IP=0x00;
EIE1|=0x80;
EIP1|=0x80;
}
void delay(unsigned int m) //延时程序
{
for(i=0;i<2000;i++)
{
for(j=0;j<m;j++){_nop_(); _nop_();}
}
}
7. 电脑文件加密,重做系统后加密文件不能用了
看看吧,希望对你有帮助 EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持). EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件. 它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等) EFS是如何工作的 当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。 一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步: 第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。 第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。 第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK. 第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK. 第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。 第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。 第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的. 第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。 加密过程图片可参考 http://www.ntfs.com/images/encryption.gif 文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后
8. 我已经完成魔方六面还原的大部分,仅剩两个角没完成。谁能帮帮我,用怎样
只翻转两个角块。
2.(FD'F'R'D'R)U2(R'DRFDF')U2
3.(FD'F'R'D'R)U(R'DRFDF')U'
4.U2(R'DRFDF')U(FD'F'R'D'R)U
对公式进行大致说明。把六个面分别用不同的符号表示。将面向操作者的面称为“前(F)”;其他以此相对应的位置称为“右(R)、顶(U)、后(B)、左(L)、底(D)”。当所转动的那一面面向自己,顺时针转动90度时用字母表示,逆时针转动90度时用字母加'表示。当转动180度时,符号后加2。如:顺时针转动右面90度,记作R;逆时针转动右面90度,记作R';转动右面180度,记作R2或R'2(结果是一样的)。
http://bbs.mf8.com.cn/viewthread.php?tid=18828
9. 我想学学股票的技术指标
技术指标很多 .. [技术分析法] ·理论常识
道氏股价波动理论 波浪理论
成长周期理论 股票价值理论
信心理论 随机漫步理论
亚当理论 黄金分割率理论
相反理论 证券市场分析论
·K线
·量价关系分析
·常用技术分析
OX图 移动平均线 MACD
相对强弱指数 腾落指数
涨跌比率 超买超卖线
OBV线 随机指数(KD线)
乖离率 心理线 动向指数
人气指标(AR)与意愿指标(BR)
动量指标 震荡量指标
威廉指数 成交量比率
动量指标 震荡量指标
均量线指标 抛物线转向
·图形分析
常用技术分析
1.OX图 2.移动平均线 3.MACD 4.相对强弱指数(RSI) 5.腾落指数(ADL)
6. 涨跌比率(ADR) 7.超买超卖线(OBOS) 8.OBV线 9.随机指数(KD线) 10.乖离率(BIAS)
11.动向指数(DMI) 12.心理线(PSY) 13.人气指标 14.动量指标(MTM) 15.震荡量指标(OSC)
16.威廉指数(%R) 17.成交量比率(VR) 18.均量线 19.抛物线转向(SAR) 20. 逆势操作系统
21.成交笔数 22.指数点成交值 23.宝塔线 24.逆时钟曲线
所谓股价的技术分析,是相对于基本分析而言的。正如上一部分所述,基本分析法着重于对一般经济情况以及各个公司的经营管理状况、行业动态等因素进行分析,以此来研究股票的价值,衡量股价的高低。而技术分析则是透过图表或技术指标的记录,研究市场过去及现在的行为反应,以推测未来价格的变动趋势。其依据的技术指标的主要内容是由股价、成交量或涨跌指数等数据计算而得的,我们也由此可知——技术分析只关心证券市场本身的变化,而不考虑会对其产生某种影响的经济方面、政治方面的等各种外部的因素。
股价技术分析和基本分析都认为股价是由供求关系所决定。基本分析主要是根据对影响供需关系种种因素的分析来预测股价走势,而技术分析则是根据股价本身的变化来预测股价走势。技术分析的基本观点是:所有股票的实际供需量及其背后起引导作用的种种因素,包括股票市场上每个人对未来的希望、担心、恐惧等等,都集中反映在股票的价格和交易量上。
有疑问可以继续询问..
10. EFS指什么
EFS是Encrypting File System,加密文件系统的缩写,他可以被应用在windows 2000以上的操作系统且为NTFS5格式的分区上(windows xp home不支持).
EFS 只能对存储在磁盘上的数据进行加密,是一种安全的本地信息加密服务.EFS使用核心的的文件加密技术在NTFS卷上存储加密文件.
它可以防止那些未经允许的对敏感数据进行物理访问的入侵者(偷取笔记本电脑,硬盘等)
EFS是如何工作的
当一个用户使用EFS去加密文件时,必须存在一个公钥和一个私钥,如果用户没有,EFS服务自动产生一对。对于初级用户来说,即使他完全不懂加密,也能加密文件,可以对单个文件进行加密,也可以对一个文件夹进行加密,这样所有写入文件夹的文件将自动被加密。
一旦用户发布命令加密文件或试图添加一个文件到一个已加密的文件夹中,EFS将进行以下几步:
第一步:NTFS首先在这个文件所在卷的卷信息目录下(这个目录隐藏在根目录下面)创建一个叫做efs0.log的日志文件,当拷贝过程中发生错误时利用此文件进行恢复。
第二步:然后EFS调用CryptoAPI设备环境.设备环境使用Microsoft Base Cryptographic Provider 1.0 产生密匙,当打开这个设备环境后,EFS产生FEK(File Encryption Key,文件加密密匙).FEK的长度为128位(仅US和Canada),这个文件使用DESX加密算法进行加密。
第三步: 获取公有/私有密匙对;如果这个密匙还没有的话(当EFS第一次被调用时),EFS产生一对新的密匙.EFS使用1024位的RSA算法去加密FEK.
第四步:EFS为当前用户创建一个数据解密块Data Decryptong Field(DDF),在这里存放FEK然后用公有密匙加密FEK.
第五步:如果系统设置了加密的代理,EFS同时会创建一个数据恢复块Data Recovery Field(DRF),然后把使用恢复代理密匙加密过的FEK放在DRF.每定义一个恢复代理,EFS将会创建一个Data Recovery Agent(DRA).Winxp没有恢复代理这个功能,所以没有这一步.,这个区域的目的是为了在用户解密文件的中可能解密文件不可用。这些用户叫做恢复代理,恢复代理在EDRP(Encryption Data Recovery Policy,加密数据恢复策略)中定义,它是一个域的安全策略。如果一个域的EDRP没有设置,本地EDRP被使用。在任一种情况下,在一个加密发生时,EDRP必须存在(因此至少有一个恢复代理被定义)。DRF包含使用RSA加密的FEK和恢复代理的公钥。如果在EDRP列表中有多个恢复代理,FEK必须用每个恢复代理的公钥进行加密,因此,必须为个恢复代理创建一个DRF。
第六步:包含加密数据、DDF及所有DRF的加密文件被写入磁盘。
第七步: 在加密文件所在的文件夹下将会创建一个叫做Efs0.tmp的临时文件.要加密的内容被拷贝到这个临时文件,然后原来的文件被加密后的数据覆盖.在默认的情况下,EFS使用128位的DESX算法加密文件数据,但是Windows还允许使用更强大的的168位的3DES算法加密文件,这是FIPS算法必须打开,因为在默认的情况下它是关闭的.
第八步:在第一步中创建的文本文件和第七步中产生的临时文件被删除。
加密过程图片可参考 http://www.ntfs.com/images/encryption.gif
文件被加密后,只有可以从DDF或是DRF中解密出FEK的用户才可以访问文件.这种机制和一般的安全机制不同并意 味着要想访问文件,除了要有访问这个文件的权力外还必须拥有被用户的公有密匙加密过的FEK.只有使用私有密匙解密文件的用户才可以访问文件.这样的话会有一个问题:就是一个可以访问文件的用户可把文件加密之后,文件真正的拥有者却不能访问文件.解决这个问题的办法:用户加密文件的时候只创建一个文件解密块Data Decryption Field(DDF),但是只后他可以增加附加用户到密匙队列.这种情况下,EFS简单地把FEK用想给其他用户访问权的用户的私有密匙加密.然后用这些用户的公有密匙加密FEK,新增加的DDF和第一个DDF放在一起(这些新增加的用户对文件只有访问的权力).
解密的过程和加密的过程是相反的,参考http://www.ntfs.com/images/decryption.gif
首先,系统检测用户是否具有被EFS使用的私有密匙.如果有的话,系统将会在读取EFS属性,同时在DDF对列中寻找当前用户的DDF.如果DDF找到的话,用户私有密匙将会在那里解密出FEK.使用解密出来的FEK,EFS去解密加密的文件数据.需要注意的是文件从来不会完全被加密,但是有时候会去加密一些特殊的扇区如果上层模块要求的话.
EFS组成
EFS由EFS服务、EFS驱动、EFS文件系统运行库(FSRTL)和Win32 API。EFS服务作为一个标准系统服务运行,它是Windows 2000安全子系统的一部分。它与CryptoAPI接口产生钥匙、DDF和DRF,EFS驱动就象是NTFS的一部分,它呼叫EFS服务请求钥匙,DDF和DRF作为需要被创建,一个EFS驱动的组成是EFS FSRTL,它定义了EFS驱动程序能作为NTFS的代表而执行的功能。
EFS和NTFS如何共存
EFS可以被认为除NTFS外的第二层防护,为访问一个被加密的文件,用户必须有访问到文件的NTFS权限。在相关NTFS权限的用户能看到文件夹中的文件,但不能打开文件除非有相应的解密钥匙。同样,一个用户有相应的钥匙但没有相应的NTFS权限也不能访问到文件。所以一个用户要能打开加密的文件,同时需要NTFS权限和解密钥匙。
然而,NTFS权限可能被大量的方法穿越,包括口令破解程序、用户在离开前没有退出系统或系统内部的NTFSDOS。在NT4.0下,游戏结束了――硬盘上所有的数据都可以访问了。在Windows 2000下,当一个文件用EFS加密后,一个未授权的用户,即使访问到磁盘上的文件,但也不能访问文件上数据,因为没有授权用户的私钥。
EFS 属性
当NTFS加密文件的时候,它首先会为文件设置加密标志,然后在存储DDF和DDR的地方为文件创建一个$EFS属性.这个属性的属性ID=0x100,它可以被加长,占有0.5k到若干k的大小,这个大小是由DDF和DRF的数量决定的.
http://www.ntfs.com/images/efs_header.gif
下面是一个详细的EFS属性的例子.
http://www.raid1.cn/efs/pic/attribute/EFS_example.gif
紫色:EFS属性大小
天蓝色:电脑安全标识符和用户数字.它指定EFS存储证书的文件夹.为了得到文件
夹的名字,EFS会做一些转换.
5A56B378 1C365429 A851FF09 D040000 - 存储在$EFS中的数据.
78B3565A 2954361C 09FF15A8 000004D0 - 转换后的结果.
2025018970-693384732-167712168-1232 - 转换成十进制.
S-1-5-21-2025018970-693384732-167712168-1232 - 加上安全标识符前缀.
得到的文件夹就是:
%UserProfile%\ApplicationData\Microsoft\Crypto\RSA\S-1-5-21-2025018970-693384732167712168-1232\
粉红色:公有密匙特性
黄色:私有密匙全局唯一标识符(同时被当作容器名字).当EFS从CryptoAPI provider中获取设备环境的时候使用这个名字.如果$EFS属性只有一个DDF,容器的名字可以从$efs中计算出来.但是当更多的用户加入这个文件的时候(就会有更多的DDF和DRF),私有密匙全局唯一标识符并不是保存所有的用户,其它的必须从基于公有密匙存储特性的证书中恢复.
红色:加密提供器的名字(Microsoft Base Cryptographic Provider v.1.0)
绿色:用户的名称,DDF和DRF的所有者.
蓝色:加密后的FEK.通常FEK是128位的,但是被1024位的RSA密匙加密后,长度变成1024位.