kettle使用java脚本对数据进行加密解密详解

开发大佬早上给我了一个任务,在用kettle抽取某张表的数据的时候,要对里面的某个字段进行加密。要求是用AES加密,我首先搜了一下,发现了一个大佬的Base64的加密算法,这里记一下用Base64和AES方法的加密。

方法一:Base64加解密

首先摆上自己的完整的过程图:

kettle使用java脚本对数据进行加密解密详解_第1张图片
这里是java代码中主要的操作,消息步骤是数据来源的步骤,目标步骤是数据输出的步骤

kettle使用java脚本对数据进行加密解密详解_第2张图片
加解密代码如下:

import java.util.Base64;

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());
  //加密
    String foobar1 = get(Fields.In, "NAME").getString(r);
  byte[] bytes = foobar1.getBytes();
  String encoded = Base64.getEncoder().encodeToString(bytes);
  get(Fields.Out, "NAME").setValue(r, encoded);
  //String foobar2 = get(Fields.In, "IC_CARD").getString(r);
  //byte[] bytes2 = foobar2.getBytes();
  //String encoded1 = Base64.getEncoder().encodeToString(bytes2);
  //get(Fields.Out, "IC_CARD").setValue(r, encoded1);
   //解密(加密解密我是分了两张表,加密的内容在表一,解密的内容是从把表一的内动解密到表二,所以这样写解密的代码)
   //String foobar1 = get(Fields.In, "NAME").getString(r);
   //byte[] decoded = Base64.getDecoder().decode(foobar1);
  //String decodeStr = new String(decoded);
  //get(Fields.Out, "NAME").setValue(r, decodeStr);
  //String foobar2 = get(Fields.In, "IC_CARD").getString(r);
    //byte[] decoded2 = Base64.getDecoder().decode(foobar2);
  //String decodeStr2 = new String(decoded2);
  //get(Fields.Out, "IC_CARD").setValue(r, decodeStr2);
  putRow(data.outputRowMeta, r);

  return true;
}

方法二:AES加密

使用了方法一以后,大佬说要用AES加密,然后kettle中有个加密的组件,组件中有AES加密算法,就使用该组件
完整的图如下:
kettle使用java脚本对数据进行加密解密详解_第3张图片
对称加密组件的使用方法:
kettle使用java脚本对数据进行加密解密详解_第4张图片
其中的密钥要在mysql中生成。
生成密钥的sql为:select hex(‘1234567890adbcde’)

这是插入/更新中的字段的声明
kettle使用java脚本对数据进行加密解密详解_第5张图片

你可能感兴趣的:(数据库)