一、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中对应的加密、解密方法

public class Utils {

#密钥

private static String key = "test#5&124*!de";

/**

* 加密

* @param inStr

* @return

*/

public static String ENCRYPT_DES(String inStr) {

DESKeySpec desKey;

SecretKey securekey;

Cipher cipher;

try {

desKey = new DESKeySpec(key.getBytes());

securekey = SecretKeyFactory.getInstance("DES").generateSecret(desKey);

cipher = Cipher.getInstance("DES/CBC/NoPadding");

cipher.init(Cipher.ENCRYPT_MODE, securekey, new IvParameterSpec(new byte[8]));

byte[] inBytes = new byte[((int) (inStr.length() / 8) + 1) * 8];

for (int i = 0; i < inStr.length(); i++) {

inBytes[i] = inStr.getBytes()[i];

}

byte[] enBytes = cipher.doFinal(inBytes);

String hexStr = DatatypeConverter.printHexBinary(enBytes);

return hexStr;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

/**

* 解密

* @param encryptStr

* @return

*/

public static String DECRYPT_DES(String encryptStr) {

DESKeySpec desKey;

SecretKey securekey;

Cipher cipher;

try {

desKey = new DESKeySpec(key.getBytes());

securekey = SecretKeyFactory.getInstance("DES").generateSecret(desKey);

cipher = Cipher.getInstance("DES/CBC/NoPadding");

cipher.init(Cipher.DECRYPT_MODE, securekey, new IvParameterSpec(new byte[8]));

byte[] decryptBytes = cipher.doFinal(Hex.decodeHex(encryptStr.toCharArray()));

return new String(decryptBytes).trim();

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return null;

}

public static void main(String[] args) {

System.out.println("加密:"+ENCRYPT_DES("18693157906"));

System.out.println("解密:"+DECRYPT_DES("FAD42A3BB2A4B9A5B36847714A56FE65"));

}

}

三、运行代码得到结果

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

解密后的明文是18693157906

跟数据库加密一致

java encrypt des_oracle中的encrypt_des加密对应Java的加密方式相关推荐

  1. java map clone_Java中HashMap的clone()方法: java.util.HashMap.clone() - Break易站

    Java中的HashMap java.util.HashMap.clone()方法用于返回所提到的哈希映射HashMap的浅表副本.它只是创建了map的副本. HashMap.clone句法: Has ...

  2. java向数组中增加新元素_用Java中的新元素替换List的给定索引处的元素

    java向数组中增加新元素 Given a list of the integers and we have to replace it an element from specified index ...

  3. grpc java 泛型_gRPC中Any类型的使用(Java和NodeJs端)

    工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...

  4. java执行jar中的main_浅谈java 执行jar包中的main方法

    浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...

  5. java map equals_Java中EnumMap的equals()方法: Java.util.EnumMap.equals() - Break易站

    Java中的Java.util.EnumMap.equals(obj)用于将传递的对象与 句法: boolean equals(Object obj) 参数:该方法采用Object类型的一个参数obj ...

  6. java 从excel中读取数据_在Java中读取Excel文件的内容和导出数据到Excel文件中

    转自www.chianjavaworld.net 原作者:SonyMusic 读:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 在Java ...

  7. java获取路径中的文件名_3种Java从文件路径中获取文件名的方法

    package test; import java.io.File; public class FileName { /** * @param args */ public static void m ...

  8. java获取项目中的路径_通过java获取当前项目路径

    展开全部 getClass().getResource() 方法获得相对e5a48de588b63231313335323631343130323136353331333332643932路径( 此方 ...

  9. java 包含汉字,【转载】Java判断字符串中是不是包含汉字

    [转载]Java判断字符串中是否包含汉字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class If ...

最新文章

  1. Windows下Git Bash的基本使用
  2. c# winform 关于给静态全局变量赋值的问题
  3. WPF:数据绑定--PropertyChangeNotification属性更改通知
  4. 【机器学习】情侣、基友、渣男和狗-基于时空关联规则的影子账户挖掘
  5. Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数
  6. AKS开讲啦! | DevOps with AKS
  7. 计算机科学导论课后单词,计算机科学导论课后总结
  8. java 网络编程connection timed out是什么意思_什么?听说这四个概念,很多 Java 老手都说不清...
  9. 关系数据库SQL之可编程性存储过程 1
  10. Java基础学习总结(49)——Excel导入导出工具类
  11. Python的单链表实现
  12. 琴生不等式一般形式_[学习笔记]常用不等式
  13. “百度贴吧之父”俞军:百度最大的问题是缺少竞争
  14. php+foreach+传值传值,php foreach 传值还是传引用
  15. 2021-12-06
  16. 「笔耕不辍」zookeeper集群之间如何通讯
  17. 力扣-多线程专项(一)(按序打印、交替打印、打印零与奇偶数)
  18. Linux系列 使用vi文本编辑器
  19. jndi weblogic mysql_WebLogic配置JNDI数据源及在项目的使用方法
  20. OpenCV是什么?它的作用是什么?

热门文章

  1. AppCan移动开发:仿口袋购物APP源码
  2. 检查linux服务器白名单,Linux服务器防火墙白名单设置
  3. 深度学习100例 | 第36天:FMD材料识别
  4. C语言重来28:如何离开多重循环
  5. 事件的节流(throttle)与防抖(debounce)
  6. 面向工资编程和简历驱动开发
  7. Chroot 环境管理工具
  8. 让人记忆深刻的2019春节营销案例
  9. 神经网络-入门3-术语
  10. pjax和ajax区别,啥是pjax?