Heim  >  Artikel  >  Datenbank  >  Oracle查询密码加密串方法

Oracle查询密码加密串方法

WBOY
WBOYOriginal
2016-06-07 17:29:241355Durchsuche

我的需求是检查在线库是否有弱密码存在,最后发现原来这样是有原因的。因为Oracle的密码是根据用户名和密码共同生成的密码。也就

方法也是参考网上牛人的结果改写的,,原来作者的需求是验证用户名和明文密码是否匹配,当时觉得用处不是很大,因为我的需求是检查在线库是否有弱密码存在,最后发现原来这样是有原因的。因为Oracle的密码是根据用户名和密码共同生成的密码。也就是说,A用户使用APP作为密码和B用户使用APP作为密码,生成的密文是不一样的。

废话不多说,贴一下我改动的函数吧。修改的东西非常少,原来是从库里面进行验证,现在我只是想得到加密串:

 create or replace function testpwd(password in varchar2)
return varchar2
authid current_user
is
 --
 raw_key raw(128):= hextoraw('0123456789ABCDEF');
 --
 raw_ip raw(128);
 pwd_hash varchar2(16);
 --
 procedure unicode_str(userpwd in varchar2, unistr out raw)
 is
  enc_str varchar2(124):='';
  tot_len number;
  curr_char char(1);
  padd_len number;
  ch char(1);
  mod_len number;
  debugp varchar2(256);
 begin
  tot_len:=length(userpwd);
  for i in 1..tot_len loop
   curr_char:=substr(userpwd,i,1);
   enc_str:=enc_str||chr(0)||curr_char;
  end loop;
  mod_len:= mod((tot_len*2),8);
  if (mod_len = 0) then
   padd_len:= 0;
  else
   padd_len:=8 - mod_len;
  end if;
  for i in 1..padd_len loop
   enc_str:=enc_str||chr(0);
  end loop;
  unistr:=utl_raw.cast_to_raw(enc_str);
 end;
 --
 function crack (userpwd in raw) return varchar2
 is
  enc_raw raw(2048);
  --
  raw_key2 raw(128);
  pwd_hash raw(2048);
  --
  hexstr varchar2(2048);
  len number;
  password_hash varchar2(16); 
 begin
  dbms_obfuscation_toolkit.DESEncrypt(input => userpwd,
        key => raw_key, encrypted_data => enc_raw );
  hexstr:=rawtohex(enc_raw);
  len:=length(hexstr);
  raw_key2:=hextoraw(substr(hexstr,(len-16+1),16));
  dbms_obfuscation_toolkit.DESEncrypt(input => userpwd,
        key => raw_key2, encrypted_data => pwd_hash );
  hexstr:=hextoraw(pwd_hash);
  len:=length(hexstr);
  password_hash:=substr(hexstr,(len-16+1),16);
  return(password_hash);
 end;
begin
 unicode_str(upper(password),raw_ip);
 return crack(raw_ip);
end;
/

linux

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Oracle RAC 自动打补丁Opatch autoNächster Artikel:MySQL 定时备份操作