为了能够在创建和使用自定义 DMSQL 程序时,使用其他语言实现的接口,DM8 提供了 C、JAVA 外部函数,这样即使外部函数在执行中出现了任何问题,都不会影响到服务器的正常执行。
无论是 C 外部函数还是 JAVA 外部函数,都需要将动态库或 jar 包上传到服务器端或在服务器端编译生成动态库或 jar 包,系统管理员应对动态库和 jar 包进行严格审查,以防止外部函数中包含病毒或恶意代码,引发安全问题。为了保证数据库的安全性和灵活性,DM 提供了 ini 参数 ENABLE_EXTERNAL_CALL 来开关外部函数功能,默认情况下,数据库会关闭外部函数的创建和执行功能。
需要注意的是,DM 不支持 C 或 JAVA 外部函数存放在 ASM 文件系统上的调用。
本文讲述开发JAVA版国密SM3加密函数,生成jar包,提供给达梦数据库创建外部函数使用过程。使用jar包创建外部函数详见:DM8创建外部函数(JAVA版国密SM3)-部署篇。
开发IDE:MyEclipse
JDK:JAVASE-1.8
第三方包:bcprov-ext-jdk15on-1.58.jar
package com.dm.crypto;
import org.bouncycastle.crypto.digests.SM3Digest;
import org.bouncycastle.crypto.macs.HMac;
import org.bouncycastle.crypto.params.KeyParameter;
import java.util.Arrays;
/**
SM3算法工具类
*/
public class SM3Util {
/**
/**
/**
package com.dm.crypto;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import org.bouncycastle.util.encoders.Hex;
public class SM3ForDM {
//计算SM3摘要值
public static String getSM3Hash(String originalStr) throws UnsupportedEncodingException {
byte[] hash = SM3Util.hash(originalStr.getBytes(“utf-8”));
return Hex.toHexString(hash);
}
//验证摘要
public static boolean verifySM3Hash(String originalStr, String sm3Hash) throws UnsupportedEncodingException {
byte[] hash = Hex.decode(sm3Hash);
boolean flag = SM3Util.verify(originalStr.getBytes(“utf-8”), hash);
return flag;
}
//计算SM3 Mac值
public static String getHmac(String key, String originalStr) throws UnsupportedEncodingException {
byte[] keyByte = key.getBytes(“utf-8”);
//System.out.println(Arrays.toString(keyByte));
//System.out.println(new String(keyByte));
byte[] srcByte = originalStr.getBytes(“utf-8”);
byte[] hmacByte = SM3Util.hmac(keyByte,srcByte);
return Arrays.toString(hmacByte);
}
}
文章
阅读量
获赞