前言

在oracle使用中,会涉及到一些字段的加密,但是又需要可逆的,这时一般会采用base64进行加密存储。这样如果涉及到查询或者数据导出,就会用到oracle的base64解密进行查看。但是涉及到密码字段的加密,肯定是不可逆,这时我们就会用到md5的加密。今天咱们就来研究下oracle的base64和md5加密的两种方法,话不多说,上干货啊。。。
在这里插入图片描述

一、加密方法Base64与MD5的区别

Base64

  • 实质是 一种编码格式,如同UTF-8
  • 是一种用64个字符来表示任意二进制数据的方法
  • 可逆性。
  • 可以将图片等二进制文件转换为文本文件。
  • 可以把非ASCII字符的数据转换成ASCII字符,避免不可见字符

MD5

  • 实质是一种散列表的计算方式
  • 不可逆性。
  • 任意长度的明文字符串,加密后得到的密文字符串是长度固定的。

二、oracle Base64加解函数

Base64加密

select utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('加密字符串'))) from dual

实例

select utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw('同意'))) from dual

执行结果

5ZCM5oSP

Base64解密

utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('加密的字符串'))))

实例

select (utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('5ZCM5oSP')))) as 结果 from dual

执行结果

同意

这样我们就拿到了中文信息,但是有的小伙伴可能会遇到解码出来的值乱码了,别慌,可能是你的数据库数据库字符集配置问题。咱们接着往下看》》》

查看数据库字符集

select userenv('language') from dual;

如果查询出来字符集是"ZHS16GBK",那么可以考虑修改数据库的字符集,但是直接修改字符集可能对数据造成不可估量的影响(慎改,可以自己提前百度查查资料哈,这里就不详细解释了)。如果我们本次的需求只是为了查看或者导出,可以利用orcle的convert() 函数进行转换,如下↓:

转换数据集

select convert((utl_raw.cast_to_varchar2(utl_encode.base64_decode(utl_raw.cast_to_raw('5ZCM5oSP')))), 'ZHS16GBK', 'UTF8')  from dual

三、oracle MD5加密

语法:

utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '需要加密的字符串')) 
例如:
select  utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '123')) from dual 

具体步骤

1、创建函数

CREATE OR REPLACE FUNCTION MD5str(
passwd IN VARCHAR2)
RETURN VARCHAR2
IS
retval varchar2(32);
BEGIN
retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => '需要加密的字符串')) ;
RETURN retval;--大小写转换
END;

调用
select MD5str(‘123’) from dual

既使用base64加密又使用MD5加密

md5函数在上面已创建(MD5str),这里就直接使用, 既使用base64加密又使用MD5加密语法如下:

select  utl_raw.cast_to_varchar2(utl_encode.base64_encode(MD5str('加密字符串'))) from dual;

oracle的加解密方法就暂时记录完啦,是不是超级简单呀,嘿嘿嘿,以上内容希望对你有帮助哦~~如内容有不足欢迎各位大佬点评指出哦
在这里插入图片描述啊啊啊

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐