Oracle数据库中MD5解密方法是什么?

Oracle数据库中MD5解密方法是什么?,第1张

MD5解密方法\x0d\x0a我在存储数据库的时候,通过md5加密方法将字段进行加密,当我在读取该字段时如何正确的读取原来的值啊\x0d\x0a------解决方案--------------------\x0d\x0a没办法,MD5是不可逆的。\x0d\x0a你需要使用可逆加密算法。\x0d\x0a------解决方案--------------------\x0d\x0a插入表中的时候md5加密\x0d\x0a比如:\x0d\x0a$sql= "insert into register(names,pswd,repswd) values( '$_POST[names] ',md5( '$_POST[pswd] '),md5( '$_POST[repswd] ')) "\x0d\x0a$qid=mysql_query($sql)\x0d\x0a读取的时候\x0d\x0a$pswd=empty($_POST[ 'pswd '])? ' ':md5($_POST[ 'pswd '])\x0d\x0a------解决方案--------------------\x0d\x0a如果业务要求可还原,那么不要采用MD5,请使用可逆加密算法,如DES加密。\x0d\x0aMD5为不可逆散列算法,可用于存储用户密码,存储后不需要永远不需要知道明文。密码比较时只需将用户输入的密码再次转成MD5码与存储的相比较即可得知用户输入密码是否正确。\x0d\x0alinux/unix *** 作系统一般采用MD5进行用户密码加密。\x0d\x0a------解决方案--------------------\x0d\x0aMD5目前所谓的破解只是采用碰撞法找到了对等因子。\x0d\x0a比如:string1的MD5码为MD1,而现在我们做到的只是又找到了一个string2,它的MD5码也是MD1。\x0d\x0a结果就是:用户登陆某采用MD5加密的系统时,本来密码是12345,现在可能用abcde也能登陆。\x0d\x0a想想可能还原吗?如果可以还原,那天大的信息也能用32位长的字符串表示了,这不成了超级压缩算法了吗,整个宇宙的信息都可以用32位长表示了。不可逆的!

1、DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数

CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)

RETURN VARCHAR2

IS

retval varchar2(32)

BEGIN

retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING =>passwd))

RETURN retval

END

select md5('123456') from dual

MD5('123456')

e10adc3949ba59abbe56e057f20f883e

2、DES加密

create or replace function

encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is

v_text varchar2(4000)

v_enc varchar2(4000)

raw_input RAW(128)

key_input RAW(128)

decrypted_raw RAW(2048)

begin

v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0))

raw_input := UTL_RAW.CAST_TO_RAW(v_text)

key_input := UTL_RAW.CAST_TO_RAW(p_key)

dbms_obfuscation_toolkit.DESEncrypt(input =>raw_input,key =>key_input,encrypted_data =>decrypted_raw)

v_enc := rawtohex(decrypted_raw)

dbms_output.put_line(v_enc)

return v_enc

end

DES加密:

update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5&124*!de')

3、DES解密函数

create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is

v_text varchar2(2000)

begin

dbms_obfuscation_toolkit.DESDECRYPT(input_string =>UTL_RAW.CAST_TO_varchar2(p_text),key_string =>p_key, decrypted_string=>v_text)

v_text := rtrim(v_text,chr(0))

dbms_output.put_line(v_text)

return v_text

end

DES解密:select decrypt_des(s.staffpwd, 'test#5&124*!de') from tb_salarysign_staff s;


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

原文地址: http://outofmemory.cn/sjk/9410922.html

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

发表评论

登录后才能评论

评论列表(0条)

保存