前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >oracle中的encrypt_des加密对应Java的加密方式

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

作者头像
故久
发布2020-05-26 15:28:48
1.4K0
发布2020-05-26 15:28:48
举报
文章被收录于专栏:故久故久
代码语言:javascript
复制
一、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

代码语言:javascript
复制
二、java中对应的加密、解密方法
代码语言:javascript
复制
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"));
}
	
 
}
代码语言:javascript
复制
三、运行代码得到结果

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

解密后的明文是18693157906

跟数据库加密一致

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档