找回MD5加密的密码及MD5加密数据库中数据

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

有时,在开发过程中,如果不小心更改掉了项目管理员帐号的密码而又忘了,存在数据库里的密码又是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;
责任编辑:蓝雨泪 来源: CSDN博客
相关推荐

2016-12-15 09:26:53

MD5加密

2022-10-18 22:21:51

2009-06-06 18:57:47

MD5加密类Java Bean

2020-10-15 08:20:52

MD5算法加密的过程

2020-02-25 16:30:36

MD5是不是加密

2009-06-30 10:05:24

MD5加密JSP源码

2011-12-28 13:14:39

2009-09-09 18:35:07

C# 加密MD5和SHA1

2021-12-06 18:16:14

SQLCRCMD5

2021-02-19 11:55:36

C语言MD5加密

2022-11-09 08:24:39

2009-10-26 14:06:03

2009-07-24 15:58:20

ASP.NET MD5ASP.NET SHA

2017-06-28 14:38:44

2009-07-28 16:39:16

VB.NET的MD5加

2010-01-06 09:54:30

.NET Framew

2016-12-19 15:50:36

2022-10-19 07:35:28

2021-06-07 10:00:41

MD5算法加密

2012-09-20 15:45:09

点赞
收藏

51CTO技术栈公众号