首页
社区
课程
招聘
Oracle Password Hash
发表于: 2009-10-31 11:36 11401

Oracle Password Hash

2009-10-31 11:36
11401
代码烂..各路高手别见笑 以前写oracle工具里的一段..放便入库查寻或枚举
{*******************************************************}
{                                                       }
{       Oracle Password Hash                            }
{                                                       }
{       版权所有 (C) 2009 Mail:978399@qq.com  Open[xgc] }
{                                                       }
{*******************************************************}

unit OracleHASH;

interface

uses
  Windows,SysUtils;

type
   DES_cblock = array[0..7] of Byte;
   des_ks_struct = packed record
    ks: DES_cblock; 
    weak_key: Integer; 
  end;
  des_key_schedule = array[1..16] of des_ks_struct;

procedure  DES_cbc_encrypt(Source,Dest: pointer; Len: integer; Key, IV: Pointer; Enc:integer); cdecl; external 'libeay32.dll';
procedure DES_set_odd_parity(Key: des_cblock); cdecl; external 'libeay32.dll';
function DES_set_key_checked(key: des_cblock; schedule: des_key_schedule): Integer;cdecl; external 'libeay32.dll';
function Encrypt(name:widestring):string;

implementation


function Encrypt(name:widestring):string;
var
    iv,key: DES_cblock ;
    key_schedule : des_key_schedule;
    num,len,i:word;
    a: array [1..500]of byte;
    b: array [1..500] of byte;
begin
    KEY[0] := $01;
    KEY[1] :=$23;
    KEY[2] :=$45;
    KEY[3] :=$67;
    KEY[4] :=$89;
    KEY[5] :=$AB;
    KEY[6] :=$CD;
    KEY[7] :=$EF;
    len := length(name) *2;
    if len mod 8 <>0 then
    num := len + 8 - len mod 8
    else
    num := len ;
   zeromemory(@a,500);
    move(name[1],a[2],len);
   zeromemory(@b,500);
   ZeroMemory(@iv, SizeOf(iv));
    DES_set_odd_parity(KEY);
    DES_set_key_checked(key,key_schedule);
    DES_cbc_encrypt(@a,@b,len,@key_schedule[1],@iv,1);
    move(b[num-7],key[0],8);
    DES_set_odd_parity(key);
    DES_set_key_checked(key,key_schedule);
    DES_cbc_encrypt(@a,@b,len,@key_schedule[1],@iv,1);
     move(b[num-7],key[0],8);
     for i:=0 to 7 do
       Result := Result + inttohex(key[i],2);
end;
end.


u:sys
p:sys
s:syssys
Encrypt(UpperCase(s))
hash:4DE42795E66117AE

u:sys
p:test
s:systest
Encrypt(UpperCase(s))
hash:D3CE9AB10E42F19D

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
2
請說明一下,這個是做什麼用的? 怎麼用?
謝謝。
2009-10-31 12:14
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
LZ提供的是Oracle数据库系统使用的口令加密算法,其基本步骤为:
算法输入:username,password
算法输出:加密口令(或称Hash值)
steps:
1、str := username || password  (即串接username和password)
2、str := unicode (str) || [0x00]   (转成unicode码,并在str尾部填充若干个0x00,使其长度凑为8的倍数,这时因为DES加密分组为8字节)
3、tmp := DES_CBC(0x0123456789abcdef, str)   (对str做DES_CBC加密,密钥固定为0x0123456789abcdef, IV固定为0x000000000000000)
4、将加密结果tmp的最后一个8字节分组作为密钥,再对str做一次DES_CBC加密,IV仍然为0x000000000000000
5、第4部加密结果的末分组即为算法的输出(口令Hash值)

LZ在帖子末尾提供了两个加密运算的实例,大家可以实际测试一下。
2009-10-31 14:54
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
4
DES CBC...
學習了,謝謝。
2009-10-31 15:09
0
雪    币: 74
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
不理解为什么要这样处理。这样加密后的结果是可以被解密的,可以拿到user name和password的原始数据,为什么要保留这样的可能性?
2009-11-1 02:00
0
雪    币: 282
活跃值: (358)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
6
回楼上..看过程就知道不可逆
2009-11-1 11:31
0
雪    币: 74
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
又仔细看了看,估计你说的不可逆指的是第四步用的key是在第三步生成的,这确实增加了不小的难度。可毕竟你用的是DES啊,而且第三步的KEY固定不变,两个IV固定不变,还可以估计password的长度,......,真的给attacker留下了太多的想象空间。
2009-11-2 01:25
0
雪    币: 58
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
攻击者所能得到的最终加密结果就是8字节Hash值,由它是无法推断password的长度的(username事先可以知道)。实际上,如果仅知道口令Hash值,除了通过暴力穷举来破解用户口令外,没有更有效的方法,攻击复杂度为O(2^64)。(当然这个需要理论证明。)
2009-11-2 23:29
0
雪    币: 74
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
噢,仔细看了源码才发现第5步取的也是加密后的最后一组作为hash值,这样确实是不知道password的长度了。有点意思。
2009-11-3 00:05
0
雪    币: 2096
活跃值: (100)
能力值: (RANK:420 )
在线值:
发帖
回帖
粉丝
10
http://cat.inist.fr/?aModele=afficheN&cpsidt=13473842
Titre du document / Document title
Cryptanalysis of the ANSI X9.52 CBCM mode
Auteur(s) / Author(s)
BIHAM Eli (1) ; KNUDSEN Lars R. (2) ;
Affiliation(s) du ou des auteurs / Author(s) Affiliation(s)
(1) Computer Science Department, Technion - Israel Institute of Technology, Haifa 32000, ISRAEL
(2) Department of Informatics, University of Bergen, Hi-techcenter, 5020 Bergen, NORVEGE

Résumé / Abstract
In this paper we cryptanalyze the CBCM mode of operation, which was almost included in the ANSI X9.52 Triple-DES Modes of Operation standard. The CBCM mode is a Triple-DES CBC variant which was designed against powerful attacks which control intermediate feedback for the benefit of the attacker. For this purpose, it uses intermediate feedbacks that the attacker cannot control, choosing them as a keyed OFB stream, independent of the plaintexts and the ciphertexts. In this paper we find a way to use even this kind of feedback for the benefit of the attacker, and we present an attack which requires a single chosen ciphertext of 2^65 blocks which needs to be stored and 2^59 complexity of analysis (CBCM encryptions) to find the key with a high probability. As a consequence of our attack, ANSI decided to remove the CBCM mode from the proposed standard.
Revue / Journal Title
Journal of cryptology   ISSN 0933-2790  
Source / Source
2002, vol. 15, no1, pp. 47-59 (25 ref.)
Langue / Language
Anglais

Editeur / Publisher
Springer, New York, NY, ETATS-UNIS  (1988) (Revue)

Mots-clés anglais / English Keywords
Cryptanalysis ;
Mots-clés français / French Keywords
Mode CBCM ; Mode opération ; ANSI X9.52 ; Cryptanalyse ;
Mots-clés espagnols / Spanish Keywords
Criptoanálisis ;
Localisation / Location
INIST-CNRS, Cote INIST : 21877, 35400010228238.0030
2009-11-17 05:26
0
游客
登录 | 注册 方可回帖
返回
//