今天拿到了一个棘手的工作,向三方提供数据密文,操作需要在oracle中操作,以下简要介绍在oracle中如何使用java编写的函数。
- 编译java代码,由于业务方指定了java的加密算法,所以只有编译规定的编码,这里特别强调一下,oracle的版本自带的java的版本号一般较低,我的是1.6的java版本,所以我必须编译成为为1.6的编码:
-
vim SHA256.JAVA public class SHA256{ public static String getSHA256( String input) throws NoSuchAlgorithmException,UnsupportedEncodingException { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(input.getBytes(Charset.forName("UTF-8"))); byte byteData[] = md.digest(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < byteData.length; i++) { sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); } }
编译代码
-
javac -source 1.6 -target 1.6 SHA256.java -encoding utf-8
加载java的执行条件(oracle)
-
su - oracle find -name ‘initjvm.sql‘ sqlplus / as sysdba SQL>@./oracle/product/11.2.0/javavm/install/initjvm.sql;
加载.class文件
-
loadjava -r -f -o -user user/[email protected] ~/java/SHA256.class
oracle创建函数
-
CREATE OR REPLACE FUNCTION gnuhash_sha256 (string IN VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME ‘SHA256.getSHA256(java.lang.String) return java.lang.String‘;
验证结果
SEKECT gnuhash_sha256("12344556677778880099000djdlsl");
- 参考文档:http://jakub.wartak.pl/blog/?p=124