Oracle PL/SQL/System Packages/dbms crypto
Содержание
"3DES"
<source lang="sql">
SQL> SQL> CREATE OR REPLACE FUNCTION get_enc_val (
2 p_in_val IN VARCHAR2, 3 p_key IN VARCHAR2, 4 p_iv IN VARCHAR2 := NULL 5 ) 6 RETURN VARCHAR2 7 IS 8 l_enc_val RAW (4000); 9 l_enc_algo PLS_INTEGER; 10 l_in RAW (4000); 11 l_iv RAW (4000); 12 l_key RAW (4000); 13 l_ret VARCHAR2 (4000); 14 BEGIN 15 l_enc_algo := dbms_crypto.encrypt_3des; 16 l_in := utl_i18n.string_to_raw (p_in_val, "AL32UTF8"); 17 l_iv := utl_i18n.string_to_raw (p_iv, "AL32UTF8"); 18 l_key := utl_i18n.string_to_raw (p_key, "AL32UTF8"); 19 l_enc_val := 20 dbms_crypto.encrypt (src => l_in, 21 KEY => l_key, 22 iv => l_iv, 23 typ => l_enc_algo 24 + dbms_crypto.chain_cbc 25 + dbms_crypto.pad_pkcs5 26 ); 27 l_ret := RAWTOHEX (l_enc_val); 28 RETURN l_ret; 29 END; 30 /
Function created. SQL>
</source>
"3DES_2KEY"
<source lang="sql">
SQL> SQL> CREATE OR REPLACE FUNCTION get_enc_val (
2 p_in_val IN VARCHAR2, 3 p_key IN VARCHAR2, 4 p_iv IN VARCHAR2 := NULL 5 ) 6 RETURN VARCHAR2 7 IS 8 l_enc_val RAW (4000); 9 l_enc_algo PLS_INTEGER; 10 l_in RAW (4000); 11 l_iv RAW (4000); 12 l_key RAW (4000); 13 l_ret VARCHAR2 (4000); 14 BEGIN 15 l_enc_algo := dbms_crypto.encrypt_3des_2key; 16 l_in := utl_i18n.string_to_raw (p_in_val, "AL32UTF8"); 17 l_iv := utl_i18n.string_to_raw (p_iv, "AL32UTF8"); 18 l_key := utl_i18n.string_to_raw (p_key, "AL32UTF8"); 19 l_enc_val := 20 dbms_crypto.encrypt (src => l_in, 21 KEY => l_key, 22 iv => l_iv, 23 typ => l_enc_algo 24 + dbms_crypto.chain_cbc 25 + dbms_crypto.pad_pkcs5 26 ); 27 l_ret := RAWTOHEX (l_enc_val); 28 RETURN l_ret; 29 END; 30 /
Function created. SQL>
</source>
"AES128"
<source lang="sql">
SQL> SQL> SQL> CREATE OR REPLACE FUNCTION get_enc_val (
2 p_in_val IN VARCHAR2, 3 p_key IN VARCHAR2, 4 p_iv IN VARCHAR2 := NULL 5 ) 6 RETURN VARCHAR2 7 IS 8 l_enc_val RAW (4000); 9 l_enc_algo PLS_INTEGER; 10 l_in RAW (4000); 11 l_iv RAW (4000); 12 l_key RAW (4000); 13 l_ret VARCHAR2 (4000); 14 BEGIN 15 l_enc_algo := dbms_crypto.encrypt_aes128; 16 l_in := utl_i18n.string_to_raw (p_in_val, "AL32UTF8"); 17 l_iv := utl_i18n.string_to_raw (p_iv, "AL32UTF8"); 18 l_key := utl_i18n.string_to_raw (p_key, "AL32UTF8"); 19 l_enc_val := 20 dbms_crypto.encrypt (src => l_in, 21 KEY => l_key, 22 iv => l_iv, 23 typ => l_enc_algo 24 + dbms_crypto.chain_cbc 25 + dbms_crypto.pad_pkcs5 26 ); 27 l_ret := RAWTOHEX (l_enc_val); 28 RETURN l_ret; 29 END; 30 /
Function created. SQL> SQL>
</source>
"AES192"
<source lang="sql">
SQL> SQL> SQL> CREATE OR REPLACE FUNCTION get_enc_val (
2 p_in_val IN VARCHAR2, 3 p_key IN VARCHAR2, 4 p_iv IN VARCHAR2 := NULL 5 ) 6 RETURN VARCHAR2 7 IS 8 l_enc_val RAW (4000); 9 l_enc_algo PLS_INTEGER; 10 l_in RAW (4000); 11 l_iv RAW (4000); 12 l_key RAW (4000); 13 l_ret VARCHAR2 (4000); 14 BEGIN 15 l_enc_algo := dbms_crypto.encrypt_aes192; 16 l_in := utl_i18n.string_to_raw (p_in_val, "AL32UTF8"); 17 l_iv := utl_i18n.string_to_raw (p_iv, "AL32UTF8"); 18 l_key := utl_i18n.string_to_raw (p_key, "AL32UTF8"); 19 l_enc_val := 20 dbms_crypto.encrypt (src => l_in, 21 KEY => l_key, 22 iv => l_iv, 23 typ => l_enc_algo 24 + dbms_crypto.chain_cbc 25 + dbms_crypto.pad_pkcs5 26 ); 27 l_ret := RAWTOHEX (l_enc_val); 28 RETURN l_ret; 29 END; 30 /
Function created.
</source>
"AES256"
<source lang="sql">
SQL> SQL> SQL> SQL> CREATE OR REPLACE FUNCTION get_enc_val (
2 p_in_val IN VARCHAR2, 3 p_key IN VARCHAR2, 4 p_iv IN VARCHAR2 := NULL 5 ) 6 RETURN VARCHAR2 7 IS 8 l_enc_val RAW (4000); 9 l_enc_algo PLS_INTEGER; 10 l_in RAW (4000); 11 l_iv RAW (4000); 12 l_key RAW (4000); 13 l_ret VARCHAR2 (4000); 14 BEGIN 15 l_enc_algo := dbms_crypto.encrypt_aes256; 16 l_in := utl_i18n.string_to_raw (p_in_val, "AL32UTF8"); 17 l_iv := utl_i18n.string_to_raw (p_iv, "AL32UTF8"); 18 l_key := utl_i18n.string_to_raw (p_key, "AL32UTF8"); 19 l_enc_val := 20 dbms_crypto.encrypt (src => l_in, 21 KEY => l_key, 22 iv => l_iv, 23 typ => l_enc_algo 24 + dbms_crypto.chain_cbc 25 + dbms_crypto.pad_pkcs5 26 ); 27 l_ret := RAWTOHEX (l_enc_val); 28 RETURN l_ret; 29 END; 30 /
Function created.
</source>
dbms_crypto.hash
<source lang="sql">
SQL> SQL> CREATE TABLE EMP(
2 EMPNO NUMBER(4) NOT NULL, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 startDate DATE, 7 SAL NUMBER(7, 2), 8 COMM NUMBER(7, 2), 9 DEPTNO NUMBER(2) 10 );
Table created. SQL> SQL> INSERT INTO EMP VALUES(7369, "SMITH", "CLERK", 7902,TO_DATE("17-DEC-1980", "DD-MON-YYYY"), 800, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7499, "ALLEN", "SALESMAN", 7698,TO_DATE("20-FEB-1981", "DD-MON-YYYY"), 1600, 300, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7521, "WARD", "SALESMAN", 7698,TO_DATE("22-FEB-1981", "DD-MON-YYYY"), 1250, 500, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7566, "JONES", "MANAGER", 7839,TO_DATE("2-APR-1981", "DD-MON-YYYY"), 2975, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7654, "MARTIN", "SALESMAN", 7698,TO_DATE("28-SEP-1981", "DD-MON-YYYY"), 1250, 1400, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7698, "BLAKE", "MANAGER", 7839,TO_DATE("1-MAY-1981", "DD-MON-YYYY"), 2850, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7782, "CLARK", "MANAGER", 7839,TO_DATE("9-JUN-1981", "DD-MON-YYYY"), 2450, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES(7788, "SCOTT", "ANALYST", 7566,TO_DATE("09-DEC-1982", "DD-MON-YYYY"), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7839, "KING", "PRESIDENT", NULL,TO_DATE("17-NOV-1981", "DD-MON-YYYY"), 5000, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES(7844, "TURNER", "SALESMAN", 7698,TO_DATE("8-SEP-1981", "DD-MON-YYYY"), 1500, 0, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7876, "ADAMS", "CLERK", 7788,TO_DATE("12-JAN-1983", "DD-MON-YYYY"), 1100, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7900, "E", "CLERK", 7698,TO_DATE("3-DEC-1981", "DD-MON-YYYY"), 950, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7902, "FORD", "ANALYST", 7566,TO_DATE("3-DEC-1981", "DD-MON-YYYY"), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7934, "MILLER", "CLERK", 7782,TO_DATE("23-JAN-1982", "DD-MON-YYYY"), 1300, NULL, 10); 1 row created. SQL> SQL> CREATE TABLE DEPT(
2 DEPTNO NUMBER(2), 3 DNAME VARCHAR2(14), 4 LOC VARCHAR2(13) 5 );
Table created. SQL> SQL> INSERT INTO DEPT VALUES (10, "ACCOUNTING", "NEW YORK"); 1 row created. SQL> INSERT INTO DEPT VALUES (20, "RESEARCH", "DALLAS"); 1 row created. SQL> INSERT INTO DEPT VALUES (30, "SALES", "CHICAGO"); 1 row created. SQL> INSERT INTO DEPT VALUES (40, "OPERATIONS", "BOSTON"); 1 row created. SQL> SQL> SQL> SQL> variable hash varchar2(100); SQL> SQL> begin
2 for x in ( select deptno, dname, loc 3 from dept 4 where deptno = 10 ) 5 loop 6 dbms_output.put_line( "Dname: " || x.dname ); 7 dbms_output.put_line( "Loc: " || x.loc ); 8 dbms_output.put_line( "Hash: " || dbms_crypto.hash( utl_raw.cast_to_raw(x.deptno||"/"||x.dname||"/"||x.loc),dbms_crypto.hash_sh1 ) ); 9 :hash := dbms_crypto.hash( utl_raw.cast_to_raw(x.deptno||"/"||x.dname||"/"||x.loc),dbms_crypto.hash_sh1 ); 10 end loop; 11 end; 12 /
SQL> SQL> drop table emp; Table dropped. SQL> drop table dept; Table dropped.
</source>
dbms_crypto.hash_sh1
<source lang="sql">
SQL> SQL> SQL> CREATE TABLE EMP(
2 EMPNO NUMBER(4) NOT NULL, 3 ENAME VARCHAR2(10), 4 JOB VARCHAR2(9), 5 MGR NUMBER(4), 6 HIREDATE DATE, 7 SAL NUMBER(7, 2), 8 COMM NUMBER(7, 2), 9 DEPTNO NUMBER(2) 10 );
Table created. SQL> SQL> INSERT INTO EMP VALUES(7369, "SMITH", "CLERK", 7902,TO_DATE("17-DEC-1980", "DD-MON-YYYY"), 800, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7499, "ALLEN", "SALESMAN", 7698,TO_DATE("20-FEB-1981", "DD-MON-YYYY"), 1600, 300, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7521, "WARD", "SALESMAN", 7698,TO_DATE("22-FEB-1981", "DD-MON-YYYY"), 1250, 500, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7566, "JONES", "MANAGER", 7839,TO_DATE("2-APR-1981", "DD-MON-YYYY"), 2975, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7654, "MARTIN", "SALESMAN", 7698,TO_DATE("28-SEP-1981", "DD-MON-YYYY"), 1250, 1400, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7698, "BLAKE", "MANAGER", 7839,TO_DATE("1-MAY-1981", "DD-MON-YYYY"), 2850, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7782, "CLARK", "MANAGER", 7839,TO_DATE("9-JUN-1981", "DD-MON-YYYY"), 2450, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES(7788, "SCOTT", "ANALYST", 7566,TO_DATE("09-DEC-1982", "DD-MON-YYYY"), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7839, "KING", "PRESIDENT", NULL,TO_DATE("17-NOV-1981", "DD-MON-YYYY"), 5000, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES(7844, "TURNER", "SALESMAN", 7698,TO_DATE("8-SEP-1981", "DD-MON-YYYY"), 1500, 0, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7876, "ADAMS", "CLERK", 7788,TO_DATE("12-JAN-1983", "DD-MON-YYYY"), 1100, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7900, "E", "CLERK", 7698,TO_DATE("3-DEC-1981", "DD-MON-YYYY"), 950, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES(7902, "FORD", "ANALYST", 7566,TO_DATE("3-DEC-1981", "DD-MON-YYYY"), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES(7934, "MILLER", "CLERK", 7782,TO_DATE("23-JAN-1982", "DD-MON-YYYY"), 1300, NULL, 10); 1 row created. SQL> SQL> CREATE TABLE DEPT(
2 DEPTNO NUMBER(2), 3 DNAME VARCHAR2(14), 4 LOC VARCHAR2(13) 5 );
Table created. SQL> SQL> INSERT INTO DEPT VALUES (10, "ACCOUNTING", "NEW YORK"); 1 row created. SQL> INSERT INTO DEPT VALUES (20, "RESEARCH", "DALLAS"); 1 row created. SQL> INSERT INTO DEPT VALUES (30, "SALES", "CHICAGO"); 1 row created. SQL> INSERT INTO DEPT VALUES (40, "OPERATIONS", "BOSTON"); 1 row created. SQL> SQL> SQL> begin
2 for x in ( select deptno, dname, loc from dept where deptno = 10 ) 3 loop 4 dbms_output.put_line( "Dname: " || x.dname ); 5 dbms_output.put_line( "Loc: " || x.loc ); 6 dbms_output.put_line( "Hash: " ||dbms_crypto.hash( utl_raw.cast_to_raw(x.deptno||"/"||x.dname||"/"||x.loc),dbms_crypto.hash_sh1 ) ); 7 end loop; 8 end; 9 /
SQL> SQL> SQL> SQL> drop table dept; Table dropped. SQL> drop table emp; Table dropped.
</source>
"RC4"
<source lang="sql">
SQL> SQL> SQL> CREATE OR REPLACE FUNCTION get_enc_val (
2 p_in_val IN VARCHAR2, 3 p_key IN VARCHAR2, 4 p_iv IN VARCHAR2 := NULL 5 ) 6 RETURN VARCHAR2 7 IS 8 l_enc_val RAW (4000); 9 l_enc_algo PLS_INTEGER; 10 l_in RAW (4000); 11 l_iv RAW (4000); 12 l_key RAW (4000); 13 l_ret VARCHAR2 (4000); 14 BEGIN 15 l_enc_algo := dbms_crypto.encrypt_rc4; 16 l_in := utl_i18n.string_to_raw (p_in_val, "AL32UTF8"); 17 l_iv := utl_i18n.string_to_raw (p_iv, "AL32UTF8"); 18 l_key := utl_i18n.string_to_raw (p_key, "AL32UTF8"); 19 l_enc_val := 20 dbms_crypto.encrypt (src => l_in, 21 KEY => l_key, 22 iv => l_iv, 23 typ => l_enc_algo 24 + dbms_crypto.chain_cbc 25 + dbms_crypto.pad_pkcs5 26 ); 27 l_ret := RAWTOHEX (l_enc_val); 28 RETURN l_ret; 29 END; 30 /
Function created. SQL> SQL>
</source>