oracle中的encrypt_des加密对应Java的加密方式

一、oracle中的加密函数encrypt_des

create or replace function encrypt_des(vi_data varchar2) return varchar2 is --加密 vr_data varchar2(4000); vr_enc varchar2(4000); raw_input RAW(128); key_input RAW(128); decrypted_raw RAW(2048); vr_key varchar2(64); begin if vi_data is null then return null; end if; select MOBILEKEY into vr_key from CENKEY; vr_data := rpad(vi_data, (trunc(length(vi_data) / 8) + 1) * 8, chr(0)); raw_input := UTL_RAW.CAST_TO_RAW(vr_data); key_input := UTL_RAW.CAST_TO_RAW(vr_key); dbms_obfuscation_toolkit.DESEncrypt(input => raw_input, key => key_input, encrypted_data => decrypted_raw); vr_enc := rawtohex(decrypted_raw); dbms_output.put_line(vr_enc);

return vr_enc; end;

下图是加密后的结果

将18693157906加密后的密文是 FAD42A3BB2A4B9A5B36847714A56FE65

二、java中对应的加密、解密方法

1public class Utils { 2 3#密钥 4private static String key = "test#5&124*!de"; 5 6 /** 7 * 加密 8 * @param inStr 9 * @return 10 */ 11 public static String ENCRYPT_DES(String inStr) { 12 DESKeySpec desKey; 13 SecretKey securekey; 14 Cipher cipher; 15 try { 16 17 desKey = new DESKeySpec(key.getBytes()); 18 securekey = SecretKeyFactory.getInstance("DES").generateSecret(desKey); 19 cipher = Cipher.getInstance("DES/CBC/NoPadding"); 20 cipher.init(Cipher.ENCRYPT_MODE, securekey, new IvParameterSpec(new byte[8])); 21 byte[] inBytes = new byte[((int) (inStr.length() / 8) + 1) * 8]; 22 for (int i = 0; i < inStr.length(); i++) { 23 inBytes[i] = inStr.getBytes()[i]; 24 } 25 byte[] enBytes = cipher.doFinal(inBytes); 26 String hexStr = DatatypeConverter.printHexBinary(enBytes); 27 return hexStr; 28 29 } catch (Exception e) { 30 // TODO Auto-generated catch block 31 e.printStackTrace(); 32 } 33 34 return null; 35 36 } 37 38 /** 39 * 解密 40 * @param encryptStr 41 * @return 42 */ 43 public static String DECRYPT_DES(String encryptStr) { 44 DESKeySpec desKey; 45 SecretKey securekey; 46 Cipher cipher; 47 try { 48 desKey = new DESKeySpec(key.getBytes()); 49 securekey = SecretKeyFactory.getInstance("DES").generateSecret(desKey); 50 cipher = Cipher.getInstance("DES/CBC/NoPadding"); 51 cipher.init(Cipher.DECRYPT_MODE, securekey, new IvParameterSpec(new byte[8])); 52 byte[] decryptBytes = cipher.doFinal(Hex.decodeHex(encryptStr.toCharArray())); 53 return new String(decryptBytes).trim(); 54 55 } catch (Exception e) { 56 // TODO Auto-generated catch block 57 e.printStackTrace(); 58 } 59 60 return null; 61 62 } 63 64 public static void main(String[] args) { 65 System.out.println("加密:"+ENCRYPT_DES("18693157906")); 66 System.out.println("解密:"+DECRYPT_DES("FAD42A3BB2A4B9A5B36847714A56FE65")); 67} 68 69 70}

三、运行代码得到结果

可以看到加密后的密文是FAD42A3BB2A4B9A5B36847714A56FE65

解密后的明文是18693157906

跟数据库加密一致

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

oracle中的encrypt_des加密对应Java的加密方式 - HelloWorld