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

这篇博客介绍了如何在 Kettle 中利用 Java 脚本来进行 AES 加解密操作。文章详细展示了如何解密 NAME 和 PHONE 字段,并提供了相应的 Java 代码示例,包括解密函数、Base64 工具类以及 AES 对称加解密工具类。此外,还提到了依赖的库 `jersey-core-1.19.1`。
摘要由CSDN通过智能技术生成

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 processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {

if (first) {

first = false;

}

Object[] r = getRow();

if (r == null) {

setOutputDone();

return false;

}

r = createOutputRow(r, data.outputRowMeta.size());

//解密 NAME

String sSrc_NAME = get(Fields.In, "NAME").getString(r);

String dSrc_NAME = decrypt(sSrc_NAME);

get(Fields.Out, "NAME").setValue(r, dSrc_NAME);

//解密 PHONE

String sSrc_PHONE = get(Fields.In, "PHONE").getString(r);

String dSrc_PHONE = decrypt(sSrc_PHONE);

get(Fields.Out, "PHONE").setValue(r, dSrc_PHONE);

putRow(data.outputRowMeta, r);

return true;

}

public static String decrypt(String sSrc) {

try {

SecretKeySpec skeySpec = new SecretKeySpec("AEA密钥".getBytes("UTF-8"), "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");//"算法/模式/补码方式"

cipher.init(javax.crypto.Cipher.DECRYPT_MODE, skeySpec);

byte[] encrypted1 = Base64.decode(sSrc);

byte[] original = cipher.doFinal(encrypted1);

String encoded = new String(original, "UTF-8").trim();

return encoded;

} catch (Exception e) {

return "";

}

}

base64 工具类

com.sun.jersey

jersey-core

1.19.1

另外附AES对称加解密工具类

import java.io.UnsupportedEncodingException;

import javax.crypto.Cipher;

import javax.crypto.spec.SecretKeySpec;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.sun.jersey.core.util.Base64;

/**

* 加解密工具

* @author Jack

*

*/

public class CopyOfIShenZhenAESUtil {

private static final Logger log=LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);

public static byte[] sKey;//秘钥

private static String charset="UTF-8";

static{

try {

sKey="AES密钥".getBytes(charset);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

String str="3XGb50nCvqNih6mKQN56/g==";

str=encrypt(str,sKey);

System.out.println(str);

str=decrypt(str,sKey);

System.out.println(str);

}

public static String decrypt(String sSrc, byte[] raw) {

if ((sSrc == null) || (sSrc.length() == 0))

return sSrc;

sSrc = sSrc.replaceAll("\r?\n?", "");

try {

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");//"算法/模式/补码方式"

cipher.init(Cipher.DECRYPT_MODE, skeySpec);

byte[] encrypted1 = Base64.decode(sSrc);

byte[] original = cipher.doFinal(encrypted1);

return new String(original, charset).trim();

} catch (Exception e) {

log.error("解密出错,sSrc=" + sSrc);

log.error(e.getMessage());

}

return sSrc;

}

public static String encrypt(String sSrc, byte[] raw) {

if ((sSrc == null) || (sSrc.length() == 0))

return sSrc;

try {

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] encrypted = cipher.doFinal(sSrc.getBytes(charset));

return new String(Base64.encode(encrypted), charset);

//return new String(Base64.encode(encrypted));

} catch (Exception e) {

log.error("加密出错,sSrc=" + sSrc);

log.error(e.getMessage());

}

return sSrc;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值