首页 > 数据库 >oracle DES3 to Java code

oracle DES3 to Java code

时间:2023-11-16 12:11:59浏览次数:38  
标签:code Java RAW varchar2 key import oracle input data

oracle 加密

create or replace function des3_enc(input varchar2) return varchar2
is i_data varchar2(128);
v_in varchar2(255);
i_key varchar2(128);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
i_data:= input;
raw_input := UTL_RAW.CAST_TO_RAW(rpad(i_data,(trunc(length(i_data)/8)+1)*8,chr(0)));
key_input := UTL_RAW.CAST_TO_RAW('abcdef0123456789');
dbms_obfuscation_toolkit.DES3Encrypt(input => raw_input,key => key_input,encrypted_data => decrypted_raw);
return to_char(rawtohex(decrypted_raw));
end des3_enc;

oracle 解密

create or replace function des3_dec
(
    input varchar2
)
return varchar2
is
  i_data varchar2(2048);
i_key varchar2(2048);
v_in varchar2(2048);
i_data := input;
dbms_obfuscation_toolkit.DES3DECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(i_data),key_string => 'abcdef0123456789',decrypted_string=> v_in);
v_in := rtrim(v_in,chr(0));
  return v_in;
end des3_dec;

java 加密 解密

package com.example.Des3Helper;

import cn.hutool.core.util.HexUtil;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Hex;

import javax.crypto.*;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import static java.nio.charset.StandardCharsets.UTF_8;

public class Des3Helper {
    public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, IllegalBlockSizeException, BadPaddingException, InvalidAlgorithmParameterException, InvalidKeyException, DecoderException, UnsupportedEncodingException {

        String key = "abcdef0123456789";
        String vi = "0123456789abcdef";
        String input = "420105201508050014";

        Cipher cipher = Cipher.getInstance("DESede/CBC/NoPadding");
        IvParameterSpec iv = new IvParameterSpec(HexUtil.decodeHex(vi.toCharArray()));

        byte[] keyBytes = new byte[24];
        System.arraycopy(key.getBytes(UTF_8), 0, keyBytes, 0, 16);
        System.arraycopy(key.getBytes(UTF_8), 0, keyBytes, 16, 8);
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "DESede");

        byte[] inBytes = new byte[((input.length() / 8) + 1) * 8];
        System.arraycopy(input.getBytes(UTF_8), 0, inBytes, 0, input.length());
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, iv);

        String encryptString = HexUtil.encodeHexStr(cipher.doFinal(inBytes), false);
        System.out.println("encryptString = " + encryptString);

        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, iv);
        String decryptString = new String(cipher.doFinal(Hex.decodeHex(encryptString))).trim();
        System.out.println("decryptString = " + decryptString);
    }
}

标签:code,Java,RAW,varchar2,key,import,oracle,input,data
From: https://www.cnblogs.com/guanchaoguo/p/17835955.html

相关文章

  • java8 stream api流式编程
    ......
  • 学透java自增(++)自减(--)运算符
    基本介绍自增(++)和自减(--)运算符是对变量在原始值的基础上进行加1或减1的操作。它们都有前缀和后缀两种形式。前缀就是++在前面,后缀就是++在后面前缀先自增(减),后缀后自增(减)前缀形式的运算规则可以概括为:“先自增(减),后引用”,如++a后缀形式的运算规则可以概括为:“先引......
  • JavaScript 的数组方法
    数组方法构成了任何编程语言中数组的基本方面。这些方法使程序员能够操作、迭代和转换数组,为各种任务提供有效的解决方案。无论是排序、过滤还是映射数据,理解和利用数组方法都是释放代码全部潜力的关键值()该方法返回一个迭代器,为数组中的每个索引提供一个值,不需要任何参数。长度......
  • JavaDoc生成文档(待完善)
    使用IDEA产生Java.doc文档在网摘点赞里  命令行:javadoc-encoding UTF-8-charsetUTF-8Doc.java(文件名)    ......
  • oracle SQL 实现对数据库的的脱敏和对称加密
    之前的kettleETL太慢了insertintoselect83w数据220skettle83w数据etl3h26w~功能变更耗时另外如果需要再次对其他字段做脱敏时间又比较耗时需要再次编写环节复制表INSERTINTOXXXXSELECT*FROMXXXX_JM;验证数据--源表总数SELECTCOUNT(*)F......
  • Java8中Optional类的认识和用法
       Optional在Java8中引入,目的是解决 NullPointerExceptions的问题。它可以保存类型T的值,代表这个值存在。或者仅仅保存null,表示这个值不存在。原来用null表示一个值不存在,Optional可以更好的表达这个概念。并且可以避免空指针异常。这样我们就不用显式进行空值检测......
  • Java字符串、字符与数字之间的相互转换
    一、数字转字符串//将整个数字转化为字符串inti=456;//方法一Stringstr1=Integer.toString(i);System.out.println(str1);//方法二Stringstr2=i+"";System.out.println(str2)二、字符串转数字//整数方法一Stringstr="123";intnum1=Integer.parseInt(str);/......
  • Java 创建多线程的三种方法
    在Java中创建多线程,往往都要通过Thread类来实现,今天学习下Java中创建多线程的三种方法[1]。1.继承Thread类通过继承Thread类实现多线程。主要方法:1.voidrun(),线程开启后,方法将被调用执行2.voidstart(),使此线程开始执行,Java虚拟机会调用run()方法实现步骤:1.定......
  • 想快速进入人工智能领域的Java程序员?你准备好了吗?
    引言今天我们来探讨一下作为Java程序员,如何迅速融入人工智能的领域。,当前有一些流行的LLMs选择,例如ChatGPT、科大讯飞的星火、通义千问和文心一言等。如果你还没有尝试过这些工具,那么现在也不失为一个很好的机会,赶快体验一下吧。这些工具不仅能够为你的Java编程工作提供更多的可......
  • Java 多线程安全的使用小结
    在使用多线程进行编程的过程中,难免遇到共享资源读写问题,这是为了线程安全,一种思路就是使用锁来控制并发读写问题。在通过锁来实现并发安全中,常用的有以下几种:synchronized,对象锁ReentrantLock,重入锁ReentrantReadWriteLock,读写锁今天从使用的角度来看看这几种锁是如何使......