Oracle 如何MD5加密

本文介绍了一种解决因未对设备内部编码字段进行MD5加密导致设备秘钥错误的方法。通过使用Oracle提供的DBMS_OBFUSCATION_TOOLKIT.MD5函数并结合UTL_RAW.CAST_TO_RAW进行数据修复,最终将修复过程封装为函数以便于重复利用。


问题描述:

UG 的系统发现了问题, 经检查发现一种资源设备上有个字段应该被加密但是没有MD5加密,造成设备信息传递给接口后无法识别,引起了设备秘钥不正确的错误

经过排查发现这一批设备在入库的时候,内部编码字段没有加密,所以入库后表中的字段是非加密的数值,因此需对这一批数据做修复

首先想到的是DBMS_OBFUSCATION_TOOLKIT.MD5,它是MD5编码的数据包函数

SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => 字段名)

 测试对TEST进行MD5加密


SQL> SELECT SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => 'TEST') FROM DUAL;
 
SYS.DBMS_OBFUSCATION_TOOLKIT.M
--------------------------------------------------------------------------------
;貹h卒鹬D蒙^5?

DBMS_OBFUSCATION_TOOLKIT.MD5返回的字串,是RAW类型,所以无法正常显示加密的值

,因此要正确显示, 就需要使用 Utl_Raw.Cast_To_Raw 转换,

SQL> SELECT UTL_RAW.CAST_TO_RAW(SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => 'TEST'))
  2    FROM DUAL;
 
UTL_RAW.CAST_TO_RAW(SYS.DBMS_O
--------------------------------------------------------------------------------
033BD94B1168D7E4F0D644C3C95E35BF

解决方案:

查询出设备的的值, 然后对字段做MD5加密处理后问题解决

DECLARE

  V_MD5 VARCHAR2(5012);
  
  CURSOR C_DATA IS
    SELECT TE.PHYID, TE.INCODESTR 
      FROM T_PHY TE 
     WHERE TE.TYPE = 'F0908';
    
BEGIN

  FOR V_DATA IN C_DATA LOOP
    --MD5加密
    V_MD5 := UTL_RAW.CAST_TO_RAW(SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => V_DATA.INCODESTR));
    --更新
    UPDATE T_PHY TE
       SET TE.INCODESTR = LOWER(V_MD5)
     WHERE TE.PHYID = V_DATA.TE.PHYID
     
  END LOOP;
  COMMIT;
END;

问题虽然解决, 之后想想MD5加密是常用函数,后续的脚本中也可能用用到,因此将其修改成函数,方便以后使用

CREATE OR REPLACE FUNCTION MD5(PASSWD IN VARCHAR2) RETURN VARCHAR2 IS
  --PASSWD 需要加密的字符
  --@REMARK:MD5加密
  VAL VARCHAR2(32);
BEGIN
  VAL := UTL_RAW.CAST_TO_RAW(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => PASSWD));
  RETURN VAL;
END;

测试,函数运行正确

SQL> SELECT LOWER(MD5('TEST')) FROM DUAL;
 
LOWER(MD5('TEST'))
--------------------------------------------------------------------------------
033bd94b1168d7e4f0d644c3c95e35bf

   

上一篇:Oracle 字符null 处理,有点儿晕了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

=PNZ=BeijingL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值