lanman散列算法对用户口令信息进行处理时,密钥长度为多少字符

lanman散列算法对用户口令信息进行处理时,密钥长度为多少字符,第1张

1、 Windows系统本地帐号信息存储
Windows NT/2000/2003/XP等系统使用sam文件作为本地用户账户数据库,所有本地帐号的登录名和口令等相关信息都保存在这个文件中。系统对保存在sam中的口令信息进行了加密处理,以保护口令信息的机密性。此外,在系统运行期间,sam文件被system账号锁定,即使是administrator账号也无法对其进行删除或拷贝等 *** 作。 为了保证Windows *** 作系统的向后兼容性,Windows NT/2000/2003/XP系统采用了两种不同的机制对帐号的口令信息进行加密,所以在sam文件中每个用户口令对应着两个口令字,一个是LanMan版本的LM散列值,另一个是NT版本的NTLM散列值。
LanMan散列算法
LanMan散列算法对用户口令信息的处理过程:
第一,将所有英文字母均转换为大写字母形式;
第二,检查密钥长度是否是14个字符,如果密钥长度不足14个字符则用0补足;(注:Windows NT和Windows 2000系统密钥最长为14个字符,而Windows 2003和xp无此限制,如果密钥超过14个字符,则不会生成LM散列值,而是只生成NTLM散列值)
第三,将密钥平均分成两份,每份含7个字符,再分别对每份密钥进行加密处理;
第四,最后将加密处理后的密码组合起来。得到最终的LM散列值。
LM Hash示例:假设明文口令是"Welcome"
首先全部转换成大写,再变换成机器存储模式数据,在变换过程中如果明文口令不足14字节,则在后面添加0x00补足14字节。
"WELCOME" -> 57454C434F4D4500000000000000
(注:可以将明文口令复制到UltraEdit编辑器中使用十六进制方式查看即可获取明文口令的十六进制串)
然后将上述代码分割成两组7字节的数据,分别经str_to_key()函数处理得到两组8字节数据
57454C434F4D45 -str_to_key()-> 56A25288347A348A
00000000000000 -str_to_key()-> 0000000000000000
这两组8字节数据将采用DESKEY算法对魔术字符串"KGS!@#$%"进行标准DES加密,"KGS!@#$%"对应的机器代码为:4B47532140232425
56A25288347A348A -对4B47532140232425进行标准DES加密-> C23413A8A1E7665F
0000000000000000 -对4B47532140232425进行标准DES加密-> AAD3B435B51404EE
最后将加密后的这两组数据简单拼接,就得到了最后的LM Hash
LM Hash: C23413A8A1E7665FAAD3B435B51404EE

使用实例证明实体化视图和视图的区别
scott@TICKET> show user;
USER 为 "SCOTT"
scott@TICKET> create table t( key int primary key, val varchar(25));
create table t( key int primary key, val varchar(25))

第 1 行出现错误:
ORA-00955: 名称已由现有对象使用
scott@TICKET> drop table t;
表已删除。
创建基础表
scott@TICKET> create table t( key int primary key, val varchar(25));
表已创建。
插入基础数据
scott@TICKET> insert into t values(1,'a');
已创建 1 行。
scott@TICKET> insert into t values(2,'b');
已创建 1 行。
scott@TICKET> insert into t values(3,'c');
已创建 1 行。
scott@TICKET> commit;
提交完成。
scott@TICKET> select from t;
KEY VAL
---------- -------------------------
1 a
2 b
3 c
创建视图和物化视图
scott@TICKET> create view v as select from t;
create view v as select from t

第 1 行出现错误:
ORA-01031: 权限不足
scott@TICKET> conn / as sysdba
已连接。
GLOBAL_NAME
--------------------------------------------------------------------------------
sys@TICKET
给scott创建视图和物化视图的授权
sys@TICKET> grant create any view ,create any materialized view to scott;
授权成功。
sys@TICKET> conn scott/tiger
已连接。
GLOBAL_NAME
--------------------------------------------------------------------------------
scott@TICKET
scott@TICKET> create view v as select from t;
视图已创建。
scott@TICKET> select from v;
KEY VAL
---------- -------------------------
1 a
2 b
3 c
scott@TICKET> select rowid,a from t a;
ROWID KEY VAL
------------------ ---------- -------------------------
AAASzoAAEAAABHlAAA 1 a
AAASzoAAEAAABHlAAB 2 b
AAASzoAAEAAABHlAAC 3 c
scott@TICKET> select rowid,a from v a;
ROWID KEY VAL
------------------ ---------- -------------------------
AAASzoAAEAAABHlAAA 1 a
AAASzoAAEAAABHlAAB 2 b
AAASzoAAEAAABHlAAC 3 c
scott@TICKET> create materialized view mv as
2 select from t;
实体化视图已创建。
scott@TICKET> select rowid,a from mv a;
ROWID KEY VAL
------------------ ---------- -------------------------
AAASzrAAEAAABH0AAA 1 a
AAASzrAAEAAABH0AAB 2 b
AAASzrAAEAAABH0AAC 3 c
由上面:
查询t,v,mv的信息可以看出mv的rowid和其他的不一样
scott@TICKET> update t set val='aa' where key=1;
已更新 1 行。
scott@TICKET> commit;
提交完成。
scott@TICKET> select from t;
KEY VAL
---------- -------------------------
1 aa
2 b
3 c
scott@TICKET> select from v;
KEY VAL
---------- -------------------------
1 aa
2 b
3 c
scott@TICKET> select from mv;
KEY VAL
---------- -------------------------
1 a
2 b
3 c
由上面可以查看当基表t变化,t和v的查询结果相应的发生变化但是mv的数据不变化
scott@TICKET> host
scott@TICKET> conn /as sysdba
已连接。
GLOBAL_NAME
--------------------------------------------------------------------------------
sys@TICKET
sys@TICKET> conn scott/tiger
已连接。
GLOBAL_NAME
--------------------------------------------------------------------------------
scott@TICKET
刷新物化视图的信息
scott@TICKET> exec dbms_mviewrefresh('MV');
PL/SQL 过程已成功完成。
scott@TICKET> select from mv;
KEY VAL
---------- -------------------------
1 aa
2 b
3 c
scott@TICKET> update t set val='aa' where key=2;
已更新 1 行。
scott@TICKET> select from t;
KEY VAL
---------- -------------------------
1 aa
2 aa
3 c
scott@TICKET> select from v;
KEY VAL
---------- -------------------------
1 aa
2 aa
3 c
由上面可以看出mv刷新之后,mv,t,v的数据一致
scott@TICKET> select from mv;
KEY VAL
---------- -------------------------
1 aa
2 b
3 c
在创建物化视图的时候指定为快速更新视图
scott@TICKET> create materialized view mv_t refresh fast as select from t;
create materialized view mv_t refresh fast as select from t

第 1 行出现错误:
ORA-23413: 表 "SCOTT""T" 不带实体化视图日志
scott@TICKET> create materialized view log on t;
实体化视图日志已创建。
scott@TICKET> create materialized view mv_t refresh fast as select from t;
实体化视图已创建。
scott@TICKET> create materialized view mv_t2 refresh fast as select t from t;
实体化视图已创建。
由以上可以看出创建物化视图时候指定为快速更新视图必须先创建实体化视图日志,在创建实体化视图
scott@TICKET> update t set val='abc' where key=3;
已更新 1 行。
scott@TICKET> commit;
提交完成。
scott@TICKET> select from t;
KEY VAL
---------- -------------------------
1 aa
2 aa
3 abc
scott@TICKET> select from v;
KEY VAL
---------- -------------------------
1 aa
2 aa
3 abc
scott@TICKET> select from mv;
KEY VAL
---------- -------------------------
1 aa
2 b
3 c
scott@TICKET> select from mv_t;
KEY VAL
---------- -------------------------
1 aa
2 aa
3 c
scott@TICKET> select from mv_t2;
KEY VAL
---------- -------------------------
1 aa
2 aa
3 c
执行实体物化视图全部刷新
scott@TICKET> exec dbms_mviewrefresh('MV','C');
PL/SQL 过程已成功完成。
执行实体物化视图快速刷新
scott@TICKET> exec dbms_mviewrefresh('MV','F');
PL/SQL 过程已成功完成。
执行实体物化视图强制刷新
scott@TICKET> exec dbms_mviewrefresh('MV','');
PL/SQL 过程已成功完成。
查看物化视图的表信息
scott@TICKET> desc user_objects;
名称 是否为空 类型
----------------------------------------- -------- ----------------------------
OBJECT_NAME VARCHAR2(128)
SUBOBJECT_NAME VARCHAR2(30)
OBJECT_ID NUMBER
DATA_OBJECT_ID NUMBER
OBJECT_TYPE VARCHAR2(19)
CREATED DATE
LAST_DDL_TIME DATE
TIMESTAMP VARCHAR2(19)
STATUS VARCHAR2(7)
TEMPORARY VARCHAR2(1)
GENERATED VARCHAR2(1)
SECONDARY VARCHAR2(1)
NAMESPACE NUMBER
EDITION_NAME VARCHAR2(30)
scott@TICKET> col object_name for a30;
scott@TICKET> col object_type for a20;
scott@TICKET> select object_name,object_type from user_objects;
OBJECT_NAME OBJECT_TYPE
------------------------------ --------------------
BONUS TABLE
SALGRADE TABLE
EMP_ENAME_IDX INDEX
EMP_JOB_IDX INDEX
SUPPLIER TABLE
EMP_TEMP TABLE
MLOG$_EMP TABLE
RUPD$_EMP TABLE
TEST TABLE
SALES_DELTA TABLE
DEPT TABLE
EMP TABLE
PK_EMP INDEX
PK_DEPT INDEX
TBS TABLE
SYS_C0015204 INDEX
T TABLE
V VIEW
MV TABLE
SYS_C0015205 INDEX
MV MATERIALIZED VIEW
MLOG$_T TABLE
RUPD$_T TABLE
MV_T TABLE
SYS_C0015206 INDEX
MV_T MATERIALIZED VIEW
MV_T2 TABLE
SYS_C0015207 INDEX
MV_T2 MATERIALIZED VIEW
已选择29行。
由以上信息可以看出
1在对象信息(MV_T,MV_T2,MV)可以看出物化视图均对应一个同名称的表
由此可以解释为当t表更新时候,mv不更新的原因,mv实际是把基表对应的查询结果放在一个表中,查询mv
查询结果集的信息每
2每一个实体化视图日志对应的对应的表如t创建实体化视图日志,对应的表为mlog$_t
命名规则为:mlog$_<TBS_NAME>
scott@TICKET> desc mlog$_t;
名称 是否为空 类型
----------------------------------------- -------- ----------------------------
KEY NUMBER(38)
SNAPTIME$$ DATE
DMLTYPE$$ VARCHAR2(1)
OLD_NEW$$ VARCHAR2(1)
CHANGE_VECTOR$$ RAW(255)
scott@TICKET> update t set val='aaab' where key=1;
已更新 1 行。
scott@TICKET> select count(1) from mlog$_t;
COUNT(1)
----------
2
scott@TICKET> commit;
提交完成。
scott@TICKET> select count(1) from mlog$_t;
COUNT(1)
----------
2
scott@TICKET> select rowid,a from mv a;
ROWID KEY VAL
------------------ ---------- -------------------------
AAASzrAAEAAABH0AAA 1 aa
AAASzrAAEAAABH0AAB 2 aa
AAASzrAAEAAABH0AAC 3 abc
scott@TICKET> spool off;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13387040.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-26
下一篇 2023-07-26

发表评论

登录后才能评论

评论列表(0条)

保存