출처 : http://jakub.wartak.pl/blog/?p=124
SHA1, SHA256, SHA512 in Oracle for free without using DBMS_CRYPTO! (yay! without Enterprise Edition!) powered by GNU CRYPTO project
For detailed list of algorithms please consider this link. (much more than DBMS_CRYPTO in 11g, which requires you to buy Enterprise Edition).
[oracle@xeno src]$ ls -l total 764 -rw-rw-r-- 1 vnull vnull 458 Mar 1 05:53 CommonHash.java -rw-r--r-- 1 vnull vnull 598036 Mar 1 04:47 gnu-crypto.jar -rw-r--r-- 1 vnull vnull 96430 Mar 1 04:47 javax-crypto.jar -rw-r--r-- 1 vnull vnull 16969 Mar 1 04:47 javax-security.jar -rw-rw-r-- 1 vnull vnull 214 Mar 1 05:27 Main.java -rw-rw-r-- 1 vnull vnull 145 Mar 1 05:27 SHA1.java -rw-rw-r-- 1 vnull vnull 152 Mar 1 05:18 SHA256.java -rw-rw-r-- 1 vnull vnull 152 Mar 1 05:18 SHA512.java [oracle@xeno src]$ [oracle@xeno src]$ loadjava -u vnull/*** -v -resolve *.java *.jar arguments: '-u' 'vnull/***' '-v' '-resolve' 'CommonHash.java' 'Main.java' 'SHA1.java' 'SHA256.java' 'SHA512.java' 'gnu-crypto.jar' 'javax-crypto.jar' 'javax-security.jar' [..] Classes Loaded: 560 Resources Loaded: 3 Sources Loaded: 0 Published Interfaces: 0 Classes generated: 0 Classes skipped: 1 Synonyms Created: 0 Errors: 0 [oracle@xeno src]$
Now as SYSDBA:
SQL> GRANT CONNECT,RESOURCE,EXECUTE ON DBMS_CRYPTO, CREATE PROCEDURE TO vnull;
SQL> conn vnull/***
Connected.
SQL> CREATE OR REPLACE FUNCTION gnuhash_sha256 (string IN VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'SHA256.calcHash(java.lang.String) return java.lang.String';
2 /
Function created.
SQL> CREATE OR REPLACE FUNCTION gnuhash_sha512 (string IN VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'SHA512.calcHash(java.lang.String) return java.lang.String';
2 /
Function created.
SQL> CREATE OR REPLACE FUNCTION gnuhash_sha1 (string IN VARCHAR2) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'SHA1.calcHash(java.lang.String) return java.lang.String';
2 /
Function created.
SQL> select gnuhash_sha1('1234') from dual;
GNUHASH_SHA1('1234')
--------------------------------------------------------------------------------
7110eda4d09e062aa5e4a390b0a572ac0d2c0220
SQL> select gnuhash_sha256('1234') from dual;
GNUHASH_SHA256('1234')
--------------------------------------------------------------------------------
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
SQL> select gnuhash_sha512('1234') from dual;
GNUHASH_SHA512('1234')
--------------------------------------------------------------------------------
d404559f602eab6fd602ac7680dacbfaadd13630335e951f097af3900e9de176b6db28512f2e000b9d04fba5133e8b1c6e8df59db3a8ab9d60be4b97cc9e81db
SQL>
Verify results using OpenSSL :
[vnull@xeno ~]$ echo -n "1234" | openssl dgst -sha1
7110eda4d09e062aa5e4a390b0a572ac0d2c0220
[vnull@xeno ~]$ echo -n "1234" | openssl dgst -sha256
03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4
[vnull@xeno ~]$ echo -n "1234" | openssl dgst -sha512
d404559f602eab6fd602ac7680dacbfaadd13630335e951f097af3900e9de176b6db28512f2e000b9d04fba5133e8b1c6e8df59db3a8ab9d60be4b97cc9e81db
[vnull@xeno ~]$
A little bonus, performance verification: DBMS_CRYPTO from 11.1.0.6 versus GNU.CRYPTO.HASH Java library running in JVM in Oracle (oracle_sha1 vs gnuhash_sha1, Oracle does not support SHA-2 standard yet, only SHA1=160 bits).
SQL> CREATE OR REPLACE FUNCTION oracle_sha1 (string IN VARCHAR2) RETURN VARCHAR2 AS BEGIN
2 RETURN sys.dbms_crypto.hash(UTL_I18N.STRING_TO_RAW ('1234','AL32UTF8'),
3 sys.dbms_crypto.hash_sh1);
4 END;
5 /
Function created.
SQL> select oracle_sha1('1234') from dual;
ORACLE_SHA1('1234')
--------------------------------------------------------------------------------
7110EDA4D09E062AA5E4A390B0A572AC0D2C0220
SQL>
From this quick & dirty test you can see there is only 4% performance difference between native DBMS_CRYPTO and GNU_HASH…
* 관련 자바 파일 및 암호 라이브러리
http://vnull.pcnet.com.pl/dl/oracle/security/javacryptotest1.tgz
'::: DB ::: > Oracle' 카테고리의 다른 글
Shrink UNDO tablespace (0) | 2013.05.28 |
---|---|
ORA-01017 Invalid username/password;logon denied (0) | 2013.05.14 |
Installing Oracle Database 11.2 on IBM AIX 6.1 (Includes HACMP) (0) | 2012.10.22 |
Oracle DBMS_CRYPTO.hash(단방향 암호화) (0) | 2012.10.22 |
오라클 보안 관련 메타링크 문서 (0) | 2012.06.01 |