首页 > 其他分享 >kettle/ckettle进行参数对称加解密-AES为例

kettle/ckettle进行参数对称加解密-AES为例

时间:2023-11-01 18:33:20浏览次数:37  
标签:AES 加密 String 为例 kettle Exception 秘钥 org new

ckettle/kettle字段加密对称加密机制

方法调用链

kettle-core-2.3.0.1-SNAPSHOT.jar: 进行秘钥加密保护(不涉及实际业务处理)
	org.pentaho.di.core.encryption.Encr
	org.pentaho.di.core.encryption.TwoWayPasswordEncoderInterface
		使用BigInteger进行或运算来进行秘钥加密解密
symmetriccryptotrans-1.0.0-SNAPSHOT: 对称加密组件
	symmetriccryptotrans-1.0.0-SNAPSHOT.jar: 组件页面定义和加密方法触发
		org.pentaho.di.trans.steps.symmetriccryptotrans.SymmetricCryptoTrans: 加密方法触发
		org.pentaho.di.trans.steps.symmetriccryptotrans.SymmetricCryptoTransMeta: 页面参数存储和加工
		org.pentaho.di.trans.steps.symmetriccryptotrans.SymmetricCryptoTransData: 加密方法触发
	symmetricalgorithm-1.0.0-20210125.015921-2.jar: 对称加密规则处理
		org.pentaho.di.trans.steps.symmetriccrypto.symmetricalgorithm.SymmetricCrypto: 对称加密核心处理规则
		org.pentaho.di.trans.steps.symmetriccrypto.symmetricalgorithm.SymmetricCryptoInterface: 对称算法抽象接口
		org.pentaho.di.trans.steps.symmetriccrypto.symmetricalgorithm.AESSymmetricCrypto: aes算法实现类

因为kettle在对称算法时处理有删减(可能是考虑到不同算法的通用性),实际生成的秘钥无法通过标准的AES加解密验证.

示例数据:

data: 123456
secretKey: 11111111111111111111111111111111
encrypt: a3a9076f11e90da6bc740c9d73ec2b76
  • 流程配置

整体流程:

1 通过变量传入参数
2 然后对变量值加密
3 输出加密日志
4 对前一步的加密值解密
5 输出解密日志

加密配置:

操作:选择加密
算法:使用AES
方案: 这里为空即为默认.实际这个值也无法修改.代码里写的值为AES
秘钥: 加解密使用的秘钥
秘钥一个字段定: 使用指定字段作为秘钥(相当于设置动态秘钥),这里为空
秘钥字段: 指定的当做秘钥的字段
明文字段: 要进行加密的字段.这里是tel字段
密文字段: 加密后值绑定的字段

解密配置:

操作:选择解码
算法:使用AES
方案: 这里为空即为默认.实际这个值也无法修改.代码里写的值为AES
秘钥: 加解密使用的秘钥
秘钥一个字段定: 使用指定字段作为秘钥(相当于设置动态秘钥),这里为空
秘钥字段: 指定的当做秘钥的字段
明文字段: 要进行解密的字段.这里是上面加密值绑定的crypttel字段
密文字段: 解密后值绑定的字段

日志配置:

  • 服务端加解密代码

配套java生成aes秘钥方法:

package com.liu;

import org.apache.commons.codec.binary.Hex;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.nio.charset.StandardCharsets;

/**
 * @author 橙木鱼
 * @Description
 * @create 2023/10/27 14:23
 */
public class SymmetricCrypto {
    private Cipher cipher;
    private SecretKeySpec secretKeySpec;
    private String ALGORITHM = "AES";

    public SymmetricCrypto() throws Exception {
        try {
            this.cipher = Cipher.getInstance(ALGORITHM);
        } catch (Exception var3) {
            throw new Exception(var3);
        }
    }

    public void setEncryptMode() throws Exception {
        try {
            this.cipher.init(1, this.secretKeySpec);
        } catch (Exception var2) {
            throw new Exception(var2);
        }
    }

    public void setDecryptMode() throws Exception {
        try {
            this.cipher.init(2, this.secretKeySpec);
        } catch (Exception var2) {
            throw new Exception(var2);
        }
    }

    public void setSecretKey(String keyString) throws Exception {
        try {
            this.setSecretKey(Hex.decodeHex(keyString.toCharArray()));
        } catch (Exception var3) {
            throw new Exception(var3);
        }
    }

    public void setSecretKey(byte[] keyBytes) throws Exception {
        try {
            this.secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM);
        } catch (Exception var3) {
            throw new Exception(var3);
        }
    }


    public byte[] encrDecryptData(byte[] inpBytes) throws Exception {
        try {
            return this.cipher.doFinal(inpBytes);
        } catch (Exception var3) {
            throw new Exception(var3);
        }
    }

    /**
     * 验证数据
		secretKey: 11111111111111111111111111111111
		data: 123456
		encrypt: a3a9076f11e90da6bc740c9d73ec2b76
     * @param args
     * @throws CryptoException
     */
    public static void main(String[] args) throws Exception {
        SymmetricCrypto crypto = new SymmetricCrypto();
        String secretKey="11111111111111111111111111111111";
        crypto.setSecretKey(secretKey);
        // 加密
        crypto.setEncryptMode();
        String tel="123456";
        byte[] bytes = crypto.encrDecryptData(tel.getBytes(StandardCharsets.UTF_8));
        String encrypt = new String(Hex.encodeHex(bytes));
        System.out.println("encrypt: "+encrypt);

        // 解密
        crypto.setDecryptMode();
        byte[] dataBytes = Hex.decodeHex(encrypt.toCharArray());
        byte[] encrBytes = crypto.encrDecryptData(dataBytes);
        String decrypt = new String(encrBytes);
        System.out.println("decrypt: "+decrypt);
    }
}

输出结果:

encrypt: a3a9076f11e90da6bc740c9d73ec2b76
decrypt: 123456

标签:AES,加密,String,为例,kettle,Exception,秘钥,org,new
From: https://www.cnblogs.com/chengmuyu/p/17803766.html

相关文章

  • 20.4 OpenSSL 套接字AES加密传输
    在读者了解了加密算法的具体使用流程后,那么我们就可以使用这些加密算法对网络中的数据包进行加密处理,加密算法此处我们先采用AES算法,在网络通信中,只需要在发送数据之前对特定字符串进行加密处理,而在接收到数据后在使用相同的算法对数据进行恢复即可,读者如果有了套接字编程的基础,那......
  • 【群答疑】jmeter实现aes解密
    需求调用aesDecrypt方法解密Stringkeyword="eb9dc4aa69d6582693ba2e3ebe2fe260";Stringdata="C4564EEBA5C956464B1A050F4961A7C5A41D33414BA8175B668ACF8BFAB228D484BD2FB175C854F5DDBF13470D61AD073E6432C45B81303578BF004917B8DEE4";期望结果:{"tran......
  • 20.3 OpenSSL 对称AES加解密算法
    AES算法是一种对称加密算法,全称为高级加密标准(AdvancedEncryptionStandard)。它是一种分组密码,以128比特为一个分组进行加密,其密钥长度可以是128比特、192比特或256比特,因此可以提供不同等级的安全性。该算法采用了替代、置换和混淆等技术,以及多轮加密和密钥扩展等机制,使得其加密......
  • 20.3 OpenSSL 对称AES加解密算法
    AES算法是一种对称加密算法,全称为高级加密标准(AdvancedEncryptionStandard)。它是一种分组密码,以128比特为一个分组进行加密,其密钥长度可以是128比特、192比特或256比特,因此可以提供不同等级的安全性。该算法采用了替代、置换和混淆等技术,以及多轮加密和密钥扩展等机制,使得其加密......
  • 将智能合约部署到测试网中,以Sepolia为例
    首先选择alchemy创建一个以Sepolia为测试网的app如下所示 然后将HTTPS的地址复制到PRC_URL中打开自己的MetaMask钱包,并与Apps的网络互联,复制钱包私有地址到PRIVATE_KEY中 然后部署到代码中即可 实现效果如下 ......
  • AES加密
    关于AESAES属于分组加密算法,明文长度固定为128位,密钥长度可以为128、192、256位。本文以明文长度128位,密钥长度128位的AES进行实现。AES加密解密python实现#S-Box的预定义值,用于替代输入字节。256s_box=(0x63,0x7c,0x77,0x7b,0xf2,0x6b,0x6f,0xc5,0x30,......
  • Kettle链接SqlServer+Jdk8 问题解决
     这两天要弄个ldap对接,客户端server2016,数据库那边winserver2008,数据库也是2008最开是链接出现类似这样的,更换了链接mssql的Jar版本,从12换到了6的老版本,没用。  后来更改网上提示的  C:\ProgramFiles\Java\jre-1.8\lib\security\java.security文件jdk.tls.......
  • Lattice .bek档案AES加密解密
    //BEK.h#ifndef__BEK_H__#define__BEK_H__#include<stdio.h>#include<stdlib.h>#include<stdbool.h>/////////////////////////////////////////////////////////////////////////////CRCTables////////////////////////////////////////////......
  • stm32单片机在Keil环境下定义的变量都存储到哪去了?(以STM32f1系列为例)
    stm32f1系列单片机,在keil5环境下编译后显示四个储存区域,分别是Code,RO-data,RW-data,ZI-dataCode为程序代码部分RO-data表示程序定义的常量constRW-data表示已初始化的全局变量ZI-data表示未初始化的全局变量储存区域如下:Code,RO-data,RW-data............flashRW-......
  • 浅析“圆”在中国古典舞创作中的运用——以《踏歌》为例(文档)
    目录摘要IAbstractII一、绪论1(一)研究背景1(二)研究的目的及意义1(三)研究方法21.文献研究法22.经验总结法23.个案研究法2二、中国古典舞“圆”的概述3(一)中国古典舞中“圆”的认知3(二)中国古典舞中“圆”的表现形式31.静态造型中的“圆”32.动作呈现时的“圆”43.舞蹈动......