kettle传输数据使用java对ASE128密文解密

别再硬编码了!用Java代码动态解密Kettle(PDI)数据库连接密码(附完整Maven依赖) 本文详细介绍了如何通过Java代码动态解密Kettle(PDI)数据库连接密码,避免硬编码带来的安全隐患。文章解析了Kettle的加密机制,提供了完整的Maven依赖配置和工程化集成方案,帮助开发者在DevOps和自动化部署中实现密码的安全管理。 阅读详情

公司外网Mysql,内网Oracle,内外网数据用kettle传输,最近需求,外网某些字段(如身份证号)不能存储为明文,需用ASE128+Base64加密,但内网需要使用明文,方便查询统计。之前没接触过,研究了两天,终于解决,总结下心得。


(1):将加密解密算法,用java代码写好,测试无误后,打成jar包,放在kettle的lib目录下。

(2):kettle基本的传输过程略去.........在插入目标数据库前,写java代码,调用自定义jar包的方法,对敏感数据密文进行解密处理。

上代码:

(1)ASE128+Base64加密解密算法:

package com;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * AES 是一种可逆加密算法,对用户的敏感信息加密处理 对原始数据进行AES加密后,再进行Base64编码转化;
 */
public class AES128 {
/*
* 加密用的Key 可以用26个字母和数字组成 此处使用AES-128-CBC加密模式,key需要为16位(自定义)。
*/
    private static String sKey = "6d782000a3625132";
    private static String ivParameter = "66692k0da001d091";
    private static AES128 instance = null;
    private AES128() {
        }
    public static AES128 getInstance() {
        if (instance == null)
            instance = new AES128();
            return instance;
            }

    // 加密
    public static String encrypt(String sSrc, String encodingFormat,String sKey, String ivParameter) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        byte[] raw = sKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        // 使用CBC模式,需要一个向量iv,可增加加密算法的强度
        IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes(encodingFormat));
        // 此处使用BASE64做转码。
        return new BASE64Encoder().encode(encrypted);
        }
     // 解密
       public static String decrypt(String sSrc, String encodingFormat,String sKey, String ivParameter) throws Exception {
        byte[] raw = sKey.getBytes("ASCII");
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        IvParameterSpec iv = new IvParameterSpec(ivParameter.getBytes());
        cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);
        //先用base64解密
        byte[] encrypted1 = new BASE64Decoder().decodeBuffer(sSrc);
        byte[] original = cipher.doFinal(encrypted1);
        String originalString = new String(original, encodingFormat);
        return originalString;
        }
    //对kettle传输的密文解密
       public static String decryptKettle(String str) {
        try {
            String DeString = AES128.getInstance().decrypt(str, "utf-8", sKey,ivParameter);
            return DeString;
        } catch (Exception e) {
            e.printStackTrace();
        }
            return null;
        }
     //测试
    public static void main(String[] args) throws Exception {
    // 需要加密的字串
    String cSrc = "12026198505162431";
    System.out.println("加密前的字串是:" + cSrc);
    // 加密
    long lStart = System.currentTimeMillis();
    String enString = AES128.getInstance().encrypt(cSrc, "utf-8", sKey,ivParameter);
    System.out.println("加密后的字串是:" + enString);
    long lUseTime = System.currentTimeMillis() - lStart;
    System.out.println("加密耗时:" + lUseTime + "毫秒");
    // 解密
    lStart = System.currentTimeMillis();
    String DeString = AES128.getInstance().decryptKettle(enString);
    System.out.println("解密后的字串是:" + DeString);
    lUseTime = System.currentTimeMillis() - lStart;
    System.out.println("解密耗时:" + lUseTime + "毫秒");
    }

}

(2)kettle中java代码

//引入添加的类

import com.AES128;  

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi)  throws KettleException{
    Object[] r = getRow();
    if (r == null) {
    setOutputDone();
      return false;
    }
  if (first){
      first = false;
    }
    Object[] outputRow = createOutputRow(r, data.outputRowMeta.size());
        //需要解密的数据
        String zjhm = get(Fields.In, "zjhm").getString(r);
        String newzjhm = AES128.decryptKettle(zjhm);
        get(Fields.Out, "newzjhm").setValue(outputRow, newzjhm);
        putRow(data.outputRowMeta, outputRow);
        return true;
}


测试插入数据库数据是否解密正常。

kettle使用java脚本对数据进行加密解密详解 开发大佬早上给我了一个任务,在用kettle抽取某张表的数据的时候,要对里面的某个字段进行加密。要求是用AES加密,我首先搜了一下,发现了一个大佬的Base64的加密算法,这里记一下用Base64和AES方法的加密。 方法一:Base64加解密 首先摆上自己的完整的过程图: 这里是java代码中主要的操作,消息步骤是数据来源的步骤,目标步骤是数据输出的步骤 加解密代码如下: import java.util.Base64; import java.util.*; public boolean proc 阅读详情

相关推荐

Kettle实现MD5加密

kettle版本:9.2通过“JavaScript代码”组件实现对数据流字段的MD5加密;无需导入jar包;无需导入jar包;无需导入jar包;

u011979957的博客 2544

kettle 脚本 java_kettle-使用 java 脚本 对某个字段进行 AES 解密

kettle 加解密 java 脚本import javax.crypto.Cipher;import javax.crypto.spec.SecretKeySpec;import com.sun.jersey.core.util.Base64;import java.io.UnsupportedEncodingException;import java.util.*;public boolean...

weixin_29927289的博客 982

【Kotlin】加密解密2:DES、AES加密和解密

文章目录AES加密解密DES和AES密钥长度 AES加密解密 object AESCrypt{ //加密 fun encrypt(input:String,password:String): String { //创建cipher对象 val cipher = Cipher.getInstance("AES") //初始化:加密/解密...

Errol's Blog 2320

kettle基本使用

一、子程序功能和启动方式介绍 Spoon.bat: 图形界面方式启动作业和转换设计器。 Pan.bat: 命令行方式执行转换。 Kitchen.bat: 命令行方式执行作业。 Carte.bat: 启动web服务,用于 Kettle 的远程运行或集群运行。 Encr.bat: 密码加密 二、转换小练习 1.运行Spoon.bat,打开图形设计界面 2.通过导航栏:文件...

xinyi0622的博客 426

Kettle 数据库密码加密解密

如果你在Java里调用创建好的ktr文件,在开发时还是可以用的,但是上了生产测试和生产就没办法使用了,数据连接换了,这时候你可能会想到,我在创建一个转换不就好了,但是这个是有风险的,Kettle还是很友好的,为我提供了加密解密的工具!

杨海吉 4042

Kettle实现MD5加密(无需导入jar包)

kettle利用JavaScript实现对字符串进行MD5加密

kettle开发-Day43-加密环境下运行作业

开年王炸,解决kettle文件被加密的破局之法~

qq_29061315的博客 1507

告别ROS1思维:在ROS2 Humble上,用Python搞定MoveIt2机械臂控制的完整流程

本文详细介绍了在ROS2 Humble环境下使用Python控制MoveIt2机械臂的完整流程。从环境配置、架构变革到实战操作,涵盖URDF适配、Action接口编程及性能优化技巧,帮助开发者高效迁移ROS1项目至ROS2平台,实现工业级机械臂控制。

weixin_30352645的博客 451

kettle 数据库密码解密

1.找出加密后的密码:C:\Users\.kettle\shared.xml文件中找到加密的密码; 2.java代码解密 首先添加kettle相关mave依赖 <!-- 缺少的jar包自行添加 --> <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-core</artifactId> <version>8.1.0.0

dong__优快云的博客 5329

如何利用CANoe在两路CAN通道之间创建网关(gateway)

CANoe网关,利用CAPL实现CAN转发

Richy_Lai的博客 7901

华为手机连接Win11失败?内核隔离与驱动签名冲突的终极解决指南

在Windows操作系统中,驱动程序是硬件与系统通信的桥梁,其数字签名机制是保障系统内核安全的核心防线。基于虚拟化的安全技术通过强制验证驱动签名,能有效隔离恶意代码,提升系统抵御高级威胁的能力。然而,严格的签名策略有时会与部分硬件驱动产生兼容性问题,导致设备无法识别,直接影响文件传输、应用调试等核心工作流。本文聚焦于华为手机在开启Windows 11内核隔离功能时出现的连接故障,深入剖析驱动签名验证与Hypervisor保护的代码完整性原理,并提供从驱动更新、策略调整到无线替代方案的完整解决路径,帮助用户在

weixin_31309419的博客 357

kettle介绍-Step之加密及解密

可生成Encrypted 2be98afc86aa7f2e4cb79ce10bec3fd89,即为123对应的kettle加密后的密码。linux/mac系统命令行执行:encr.sh -kettle 123。windows系统命令行执行:Encr.bat -kettle 123。进入kettle的安装目录。

weixin_43398232的博客 1549

【数据清洗】数据清洗流程及经验

预处理阶段 预处理阶段主要做两件事情: 一是将数据导入处理工具。 二是看数据。包含两个部分:一是看元数据,包括字段解释、数据来源、代码表等等一切描述数据的信息;二是抽取一部分数据,对数据本身有一个直观的了解,并且初步发现一些问题,为之后的处理做准备。 第一步:缺失值清洗 四个步骤: 1、确定缺失值范围:对每个字段都计算其缺失值比例,然后按照缺失比例和字段重要性,分别制定策略。 2、去除不需要的...

JoJo93723的博客 6498

AES在线加解密工具

总的来说,AES加密/解密工具为业内提供了一个简单易用、免费开放的在线工具,让大家无需安装软件或下载工具,只要有一个网络连接就能完成AES加密过程。AES加密/解密工具操作简单明了,只需要输入明文和密钥,就能快速进行加密和解密操作。此外,AES加密/解密工具还提供了多种加密模式,如CBC、ECB、CFB、OFB等,可以让用户充分自由选择最适合自己情况的加密模式,以尽量保护加密信息的安全性。现在,有一款免费的在线AES加密工具——AES加密/解密工具来帮助大家快速实现AES加密,让加密变得简单易用。

封神之路~ 6871

【Davinci开发】:CS接口创建及连接

AUTOSAR SWC之间添加CS-port :详细讲解step

2528

【Java基础】还看不懂JDK7 HashMap环的产生原理你来打我

JDK7对旧table数据重定位到新table的函数transfer如下,其中重点关注部分以标出。 头插法正常情况下: 并发情况下 线程1只执行了Entry<K,V> next = e.next就被挂起了,而线程2正常执行完毕,结果图如下: 线程1接着下面继续执行: 通过逐步分析跟绘图可以知道红色部分会有环产生。 ...

sowhat 4244

ETL工具 Kettle 中怎么通过变量传参

摘要:本文系统介绍了Kettle(Pentaho Data Integration)中的参数传递体系,包括变量(Variable)、命名参数(Parameter)和位置参数(Argument)三种核心传参方式。详细阐述了全局变量配置、命名参数定义、位置参数使用、变量作用域及优先级等关键概念,并提供了跨作业/转换传参、命令行传参、JavaScript脚本传参等实用技巧。文章还总结了循环处理、动态SQL等高级应用场景的最佳实践,以及常见错误排查方法,为ETL开发人员构建可配置、可复用的数据集成流程提供了完整指导

油墨香^-^的博客 1478

2026 AI浏览器Agent终极对比:BrowserAct、agentBrowser、PP-Browser 谁更适合落地?(安装+实战+场景全覆盖)

1.不要盲目追求最新框架:很多人跟风用agentBrowser,结果业务是多步骤复杂办公流程,反而不如BrowserAct稳定;2.风控场景优先PP-Browser:但凡需要登录账号、频繁访问正规平台,无脑选PP-Browser,能避开99%的封禁问题;3.AI批量解析优先agentBrowser:做知识库爬取、网页内容总结、批量问答,省Token就是省成本,长期使用性价比碾压另外两者;4.个人开发调试优先BrowserAct:容错高、日志全、调试简单,新手上手最快,不容易报错翻车。

十年老程序猿,AI 疯狂研究专家,前沿硬核知识分享 335

Kettle 9.1.0.0-325 对称加密组件源码流程解析

Kettle 9.1.0.0-325 对称加密组件源码流程解析

枪枪枪的博客 795

C# WinForm上位机:从串口调试工具到智能温控系统(Modbus RTU协议实战+完整源码)

做工业上位机开发时,我们常从串口调试工具入手:验证设备通信、查看数据帧,但面对实际场景(比如温控、电机控制),单纯的“收发数据”远远不够——需要解析工业标准协议(如Modbus RTU)、实时监控关键指标、实现自动化控制逻辑,还要有稳定的UI交互和数据记录。串口调试工具能收发数据,但看不懂Modbus RTU帧(地址、功能码、寄存器、CRC校验);想控制温控设备(如加热器、风扇),但不知道如何通过Modbus写入控制指令;手动调节目标温度时,温度波动大,需要PID算法实现精准控温,但不会集成;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1304

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

kettle-数据库解密与各种跳接线标记含义

一个步骤可以拥有多个连接,转换中的数据流可以在其内的多个步骤间流通,在KETTLE的IDE中,跳接线由箭头表示,箭头的方向决定了数据的流向。当一个步骤的结果集被推送到多个步骤时,数据可以以复制的方式传递,也可以以分发的方式传递。复制的方式即每个后续的步骤收到的数据都是上一步骤的完整结果集,分发方式即每个后续的步骤收到的数据是上一步骤次序结果集,比如步骤A以分发的方式向步骤B和C推送数据,则B收到的数据中A结果集的1,3,5。号记录,C收到的数据是A结果集的2,4,6。将加密后的密码解密为123。

Allenzyg的博客 1221

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Kettle 使用JS加密解密

如何使用kettle 加密解密

Chean_Feng的博客 1904

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

kettle-数据库密码加密及解密

1.加密进入kettle的安装目录windows系统命令行执行:Encr.bat -kettle 123linux/mac系统命令行执行:encr.sh -kettle 123可生成Encrypted 2be98afc86aa7f2e4cb79ce10bec3fd89,即为123对应的kettle加密后的密码。2.解密在kettle里新建转换,拖入javascript组件,在里面写:var set...

HipPop223的博客 1万+

kettle使用MD5加密增量获取接口数据

使用JavaScript组件进行MD5加密得到Http header,调用API接口增量获取接口数据,使用json input组件解析数据入库JOB包括获取增量时间点、记录日志、更新增量时间点、获取接口数据几个转换这里用到表输入组件,生成appKey、url、拼接request body、body以及增量时间、Http header等JSONPath是xpath在json的应用。类似于XPath在xml文档中的定位, JsonPath表达式通常是用来路径检索或设置Json的。

weixin_43398232的博客 2588

kettle将密码设置为密文

如果设置了KETTLE_HOME变量,那么在这个目录中新建一个.kettle 目录。kettle.properties 是一个变量文件,这个文件我使用的最多的地方是保存 “数据库连接” 用户名和密码。如果使用kettle.properties ,可以把用户名密码/IP换成变量。有一天dba告诉你,库迁移了,数据库用户密码换了/IP变了,那么需要一个文件一个文件的修改密码/IP。另外还有一个问题,如果kettle.properties文件被别人看到,岂不是密码都泄露了?抒写方式就是 Key = Value。

weixin_44028926的博客 944
上一篇: linux 下安装并运行kettle 程序
下一篇: 索引失效的特殊场景:只有like ‘xxxx%’一个条件,索引也可能失效
github_38806262
博客等级 码龄10年 8粉丝 11原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值