前言
在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的加解密方法就暂时记录完啦,是不是超级简单呀,嘿嘿嘿,以上内容希望对你有帮助哦~~如内容有不足欢迎各位大佬点评指出哦