oracle使用java source创建AES加密与解密函数

第一步:安装PL/SQL

         这一步百度下载安装包就好

第二步:创建java source

1.左上角创建java souce脚本

2.将以下代码粘贴进去

create or replace and compile java source named md5util as
import java.security.MessageDigest;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import org.apache.commons.codec.binary.Base64;
public class MD5Util
{
  public static String encrypt(String s)
  {
       char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd','e', 'f'};
       
        try {
                byte[] strTemp = s.getBytes();
                MessageDigest mdTemp = MessageDigest.getInstance("MD5");
                mdTemp.update(strTemp);
                byte[] md = mdTemp.digest();
               
                int j = md.length;
                char str[] = new char[j * 2];
                int k = 0;
                for (int i = 0; i < j; i++) {
                    byte byte0 = md[i];
                 str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                 str[k++] = hexDigits[byte0 & 0xf];
                }
                return new String(str);
        }
        catch (Exception e){
            return null;
        }
  }
  
   public static String encryptField(String sSrc,String ckey)  throws Exception  {
            byte[] raw = ckey.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
            return new Base64().encodeToString(encrypted);

   }
   
   public static String decryptField(String sSrc,String ckey) throws Exception {
            byte[] raw = ckey.getBytes("utf-8");
            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
            byte[] encrypted1 = new Base64().decode(sSrc);
        byte[] original = cipher.doFinal(encrypted1);
        String originalString = new String(original,"utf-8");
        return originalString;
   }
}

3.可以看到上面的代码中还引入了别的java包的东西,所以需要将jar包在这里能够引入,首先将引入的java包放到一个位置,打开dos命令窗口执行以下命令

loadjava -r -f -o -user system/Db123456 D:\commons-codec-1.12.jar

4.选择PL/SQL上方的编译小三角

第三步:创建函数

1.新建一个sql窗口

2.将下方sql放进去执行,依然是执行顶部的小三角执行按钮

create or replace function md5encrypt(s varchar2)
return varchar2 as
language java name 'MD5Util.encrypt(java.lang.String) return java.lang.String';

create or replace function encryptField(s varchar2,k varchar2)
return varchar2 as
language java name 'MD5Util.encryptField(java.lang.String,java.lang.String) return java.lang.String';

create or replace function decryptField(s varchar2,k varchar2)
return varchar2 as
language java name 'MD5Util.decryptField(java.lang.String,java.lang.String) return java.lang.String';

3.可以测试函数是否可以正常使用了

-- 测试执行(如果碰到错误或者提示就刷新数据库连接再执行)
-- 测试【加密数据】
select encryptField('25.366','AD42F6697B035B75') as test from dual;
-- 测试【解密数据】
select decryptField('+6HKNK9HY0DbkvfHj4svfQ==','AD42F6697B035B75') as test from dual;

最终执行效果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫竹修

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值