数据库部分字段加密 实现该字段模糊查询
解决方案:从数据库层面 对改字段进行解密 是目前最为方便的 而oracle可以支持将java类带入到oracle从而调用对应的方法。
基本步骤:
- 编写好对应的加密解密类,方法为静态方法static修饰。
- 将其打包为jar包
- oracle数据库导入
- 编写对应的函数
function
或者存储过程procedure
[不需要返回值的就写存储过程] - 在sql里面调用
1. 编写加密解密类
image.png此处需要特别注意oracle里面调用的方法必须为静态方法
2. 打包jar包
image.png3. 导入oracle数据库
命令如下 :
loadjava -r -f -verbose -resolve -user scott/tiger@orcl des-1.0-SNAPSHOT.jar
然后正常你就会看到:
image.png
需要特别注意oracle的用户名和密码已经对应的实例
4. 编写function
当然你需要查看下是不是导入成功了
命令如下:在sql里面执行
select * from user_java_classes;
接着,你就可以编写function了
--加密
create or replace function sven_encrypt(str varchar2,key varchar2) return varchar2 as
LANGUAGE JAVA NAME 'com/epoint/utility/code/DES.encrypt(java.lang.String,java.lang.String) return java.lang.String';
--解密
create or replace function sven_decrypt(str varchar2,key varchar2) return varchar2 as
LANGUAGE JAVA NAME 'com/epoint/utility/code/DES.decrypt(java.lang.String,java.lang.String) return java.lang.String';
然后你可以查询下,是否写入成功:select * from user_objects where object_type = 'FUNCTION';
5. sql里面掉调用方法
-- dept表 三个字段 deptno dname loc
--一些测试数据,加密当然可以选择在后台java代码执行
insert into dept values(70,sven_encrypt('测试部','svensven'),'kkk');
insert into dept values(80,sven_encrypt('技术部','svensven'),'kkk');
insert into dept values(90,sven_encrypt('咨询部','svensven'),'kkk');
insert into dept values(1000,sven_encrypt('开发部','svensven'),'kkk');
insert into dept values(110,sven_encrypt('实施部','svensven'),'kkk');
--解密模糊查询
select d.*, sven_decrypt(d.testname,'svensven') from dept d where sven_decrypt(d.testname,'svensven') like '%部%';
image.png
image.png
网友评论