欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


对称加密之AES及压缩加密解密解压综合实战
ARP缓存感染攻击解析
内网ARP攻击的危害及防范方法
win7下如何设置和删除静态ARP
arp断网攻击怎么办?
360急救盘无法启动的解决方法
如何设置IP安全策略将木马阻杀在端口外
使用DNSCrypt 解决DNS攻击问题
如何提高Wi-Fi的安全性
如何正确对待通用安全漏洞评分系统(CVSS)
找回MD5加密的密码及MD5加密数据库中数据
【 来源:网络 】【 点击:4 】 【 发布时间:2017_03_03 08:59:59 】

  有时,在开发过程中,如果不小心更改掉了项目管理员帐号的密码而又忘了,存在数据库里的密码又是MD5加密后的,这时候怎么办?最为菜鸟的我,刚开始也很迷茫,不过向前辈们请教了请教,自己也查了查资料,特意整理记录一下,并分享给大家。

  前提是你知道这个密码存在在哪个表的哪个字段,只不过是加密了,如果是oracle数据库的话,可以用DBMS_OBFUSCATION_TOOLKIT.MD5 ( input => utl_raw.cast_to_raw('预置密码'))来得到一个MD5加密后的密码,

  所以我们可以在UPDATE user set password=DBMS_OBFUSCATION_TOOLKIT.MD5 ( input => utl_raw.cast_to_raw('预置密码')) where name='sys'来重新把不知道的密码用预置密码替换掉,这样我们就可用忘记密码的帐号重新登录了,如果是MySQL的话,好像有个内置MD5()函数,也可以起到这样的效果,具体的大家可以查查详细MySQL中MD5的用法,如果是SQL Server的话,好像也有对应的MD5家吗函数,记不太清了,应该是HashByte('加密方式', '待加密的值'),也可以通过这种方式找回的。

  DBMS_OBFUSCATION_TOOLKIT.MD5是oracle提供的获得md5值的函数,可以直接使用DBMS_OBFUSCATION_TOOLKIT.MD5 ( input => utl_raw.cast_to_raw('预置密码'))a FROM DUAL来得到加密后的数据,否则得到的是raw类型的数据,需要用utl_raw.cast_to_raw转换成我们常用的md5格式,还有以上得到的md5值都是大写,如果数据库中存储的是小写,需要再用lower函数转换一下。

  我们还可以使用存储过程来实现MD5加密:

  declare

  v_string varchar2(50);

  v_n number;

  begin

  v_string := utl_raw.cast_to_raw(sys.dbms_obfuscation_toolkit.md5(input_string => '123456'));

  v_n := length(v_string);

  dbms_output.put_line(v_string || '--' || v_n);

  end;

  也可以写成函数后调用实现MD5加密:

  create or replace function fun_get_md5(i_username in varchar2, i_password in varchar2)

  return varchar2 is

  begin

  return utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5(input_string => (i_username||i_password)));

  end fun_get_md5;

  sql> select fun_get_md5('zhangwz','123456') from dual;

  fun_get_md5('zhangwz','123456'

  --------------------------------------------------------------------------------

  0d8df9100cd33ef80af0527858136e0b

  下边是网上摘了一个存取用户密码信息的例子,以供大家参考:

  create table sys_user (id number,username varchar2(50),password varchar2(50));

  存取用户密码的过程应该写到存储过程中,以方便以后调用,这里是尽量省略来写。

  用户注册时存入密码:

  sql> insert into sys_user values (1001,'zhangwz', fun_get_md5('zhangwz','123456')) ;

  sql> commit;

  用户登录时取出密码:

  create or replace procedure p_login(i_uname varchar2

  ,i_passwd varchar2) is

  v_id number;

  v_error_text varchar2(200);

  begin

  select id

  into v_id

  from sys_user

  where username = i_uname

  and password = fun_get_md5(i_uname, i_passwd);

  exception

  when others then

  v_error_text := '用户名或密码不正确!' || ',sqlcode:' || sqlcode ||

  ' sqlerrm:' || substr(sqlerrm ,1 ,200);

  end p_login;

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号
淳安分站 淳安分站