java encrypt des_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中对应的加密、解密方法
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的加密方式相关推荐
- java map clone_Java中HashMap的clone()方法: java.util.HashMap.clone() - Break易站
Java中的HashMap java.util.HashMap.clone()方法用于返回所提到的哈希映射HashMap的浅表副本.它只是创建了map的副本. HashMap.clone句法: Has ...
- java向数组中增加新元素_用Java中的新元素替换List的给定索引处的元素
java向数组中增加新元素 Given a list of the integers and we have to replace it an element from specified index ...
- grpc java 泛型_gRPC中Any类型的使用(Java和NodeJs端)
工作中要把原来Java服务端基于SpringMVC的服务改为使用gRPC直接调用.由于原Service的返回值为动态的Map类型,key值不确定,且value的类型不唯一,因此使用了protobuf ...
- java执行jar中的main_浅谈java 执行jar包中的main方法
浅谈java 执行jar包中的main方法 通过 OneJar 或 Maven 打包后 jar 文件,用命令: java -jar ****.jar 执行后总是运行指定的主方法,如果 jar 中有多个 ...
- java map equals_Java中EnumMap的equals()方法: Java.util.EnumMap.equals() - Break易站
Java中的Java.util.EnumMap.equals(obj)用于将传递的对象与 句法: boolean equals(Object obj) 参数:该方法采用Object类型的一个参数obj ...
- java 从excel中读取数据_在Java中读取Excel文件的内容和导出数据到Excel文件中
转自www.chianjavaworld.net 原作者:SonyMusic 读:rrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr 在Java ...
- java获取路径中的文件名_3种Java从文件路径中获取文件名的方法
package test; import java.io.File; public class FileName { /** * @param args */ public static void m ...
- java获取项目中的路径_通过java获取当前项目路径
展开全部 getClass().getResource() 方法获得相对e5a48de588b63231313335323631343130323136353331333332643932路径( 此方 ...
- java 包含汉字,【转载】Java判断字符串中是不是包含汉字
[转载]Java判断字符串中是否包含汉字 import java.util.regex.Matcher; import java.util.regex.Pattern; public class If ...
最新文章
- Windows下Git Bash的基本使用
- c# winform 关于给静态全局变量赋值的问题
- WPF:数据绑定--PropertyChangeNotification属性更改通知
- 【机器学习】情侣、基友、渣男和狗-基于时空关联规则的影子账户挖掘
- Java黑皮书课后题第9章:*9.4(使用Random类)编写一个程序,创建一个种子为1000的Random对象,然后使用nextInt(100)方法显示0到100之间的前50个随机整数
- AKS开讲啦! | DevOps with AKS
- 计算机科学导论课后单词,计算机科学导论课后总结
- java 网络编程connection timed out是什么意思_什么?听说这四个概念,很多 Java 老手都说不清...
- 关系数据库SQL之可编程性存储过程 1
- Java基础学习总结(49)——Excel导入导出工具类
- Python的单链表实现
- 琴生不等式一般形式_[学习笔记]常用不等式
- “百度贴吧之父”俞军:百度最大的问题是缺少竞争
- php+foreach+传值传值,php foreach 传值还是传引用
- 2021-12-06
- 「笔耕不辍」zookeeper集群之间如何通讯
- 力扣-多线程专项(一)(按序打印、交替打印、打印零与奇偶数)
- Linux系列 使用vi文本编辑器
- jndi weblogic mysql_WebLogic配置JNDI数据源及在项目的使用方法
- OpenCV是什么?它的作用是什么?