Oracle PL/SQL/System Packages/dbms crypto

Материал из SQL эксперт
Перейти к: навигация, поиск

"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>