oracle表数据脱敏

为满足测试环境中资料属性表字段的脱敏需求及后续反向解析可能,本文介绍了一种利用Oracle Java函数进行数据脱敏的方法。鉴于常见的加密算法如AES、Blowfish会导致数据长度变化,影响原有表结构,最终采用map映射方式,通过编写Java程序并声明为Oracle Java函数,实现了对特定格式数据的切分和映射,确保数据长度不变的同时完成脱敏。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    工作需要,在测试环境会有一张资料属性的表的一些字段需要脱敏,但是脱敏以后还会有想反向解析的需求。在简单的翻看一些资料后,决定使用oracle java 函数,为什么直接使用数据库函数呢,因为测试库权限开放的很大,直接被看到函数体就什么都漏了。

     在编写java函数时,试了几种简单的算法,但平时简单易用的哪几种算法都会改变数据长度,比如AES,Blowfish等,但是这样就需要修改表结构,因为数据加密后很可能超过原始长度,所以最后选了个最土的办法,map映射,在了解数据格式的前提下,对数据做切分,然后写个javamap映射的程序,申明成oracle java函数,然后对需要脱敏的列使用就行了。

package test;
import java.util.*;
import java.util.regex.Pattern;


public class test_javamap{	
   	
	 public static String get_num(String input) {
		 Map<String, String> TEL_SEG = new HashMap<String, String>();

         Map<String, String> TEL_NUM = new HashMap<String, String>();

         //忽略了map的取值部分


String tel_string = input;
	//System.out.println(tel_string);
	String part_num = "";
	String out_num = "";
	//System.out.println(TEL_SEG.containsKey("136"));
	//System.out.println(TEL_SEG.get("136"));
	
	if(tel_string.substring(0,1).equals("g")){
		if (TEL_SEG.containsKey(tel_string.substring(1,4))) {
			out_num = "G" + TEL_SEG.get(tel_string.substring(1,4));
			//System.out.println("in");
			part_num = tel_string.substring(4);
			for (int i=0;i<part_num.length();i++) {
				out_num = out_num + TEL_NUM.get(part_num.charAt(i)+"");
             }
			
	}
	}
	else if (TEL_SEG.containsKey(tel_string.substring(0,3))) {
		out_num =  TEL_SEG.get(tel_string.substring(0,3));
		part_num = tel_string.substring(3);
		for (int i=0;i<part_num.length();i++) {
			//System.out.println(part_num.charAt(i));
			//System.out.println(TEL_NUM.get(part_num.charAt(i)+""));
			out_num = out_num + TEL_NUM.get(part_num.charAt(i)+"");
         }
		
	}
	else {
		if(Pattern.matches("[a-zA-Z]",tel_string.substring(0,1))) {
			out_num = tel_string.substring(0,1);
			//System.out.println("in");
			part_num = tel_string.substring(1);
			for (int i=0;i<part_num.length();i++) {
				out_num = out_num + TEL_NUM.get(part_num.charAt(i)+"");
             }
		}
		else {
		part_num = tel_string;
		for (int i=0;i<part_num.length();i++) {
			out_num = out_num +TEL_NUM.get(part_num.charAt(i)+"");
		}
         }
	}
	StringBuffer out_str = new StringBuffer(out_num);
	out_str = out_str.reverse();
	//System.out.println(out_str.reverse());
	return out_str.toString();
	 }
	 public static void main(String[] args) {}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值