Lab5_Encriptacion
Transcript of Lab5_Encriptacion
Laboratorio 5
_________________________________________________________________________________
1. Crear el usuario
CREATE USER utp_jra IDENTIFIED BY 12345
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
xxx : corresponde a las iníciales de su primer nombre y apellidos
password: el que ud. Considere conveniente
2. Otorgar permisos
GRANT connect TO utp_jra;
GRANT create table, create procedure TO utp_jra;
3. Abrir y modificar los siguientes archivos
Pkg_Encriptacion
Pkg_Encriptacion_Body
en cada uno de los archivos en el nombre del package reemplacela cadena _XXX por las primeras letras de su apellido.
4. Ejecutar con el usuario sys lo siguiente:
SELECT ENCRIPCION_jra.FB_ENCRIPTAR ('PRUEBA CODIFICACION')
FROM DUAL;
SELECT ENCRIPCION_ jra.FB_DESCENCRIPTAR (
'992106CB9CBC71E30B3636A7E20DFC20EA858DB26A706EE3')
FROM DUAL;
5. Modifique el package creados en el paso 3, a fin que la clave no esté definida dentro del package y sea enviada como parámetro a la función.Nota: la clave debe de ser 8 caracteres
6. Ingresar con el usuario creado en el paso 1, y ejecutar lo siguiente
CREATE TABLE emp (empnoNUMBER(4) NOT NULL, ename VARCHAR2(10),
job VARCHAR2(9), mgr NUMBER(4), hiredate DATE,
sal raw(2000), comm NUMBER(7,2), deptno NUMBER(2));
INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Tim', AAAAA);
INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Larry', BBBBB);
AAAA y BBBB son valores encriptados por la funcion creada en el paso Nro2
7. Ejecute un Select que descifre en valor de la columna SAL de la tabla EMPDAR PERMISO DESDE EL SYSGRANT EXECUTE ON SYS.ENCRIPCION_JRA TO utp_jra;select a.empno,a.ename, ENCRIPCION_jra.FB_DESCENCRIPTAR (A.sal,'12345678') FROM utp_jra.emp A ;
DESDE EL USUARIOselect a.empno,a.ename, SYS.ENCRIPCION_jra.FB_DESCENCRIPTAR (A.sal,'12345678') FROM emp A ;
8. Otro paquete de encriptación:
select DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW ('SECRETITOS!', 'AL32UTF8'),
typ => 4353,
key => UTL_I18N.STRING_TO_RAW ('clavedesencript', 'AL32UTF8')
)
FROM dual;
SELECT UTL_I18N.STRING_TO_RAW ('SECRETITOS!', 'AL32UTF8'),
UTL_RAW.cast_to_varchar2(
DBMS_CRYPTO.DECRYPT( DBMS_CRYPTO.ENCRYPT(src => UTL_I18N.STRING_TO_RAW ('SECRETITOS!', 'AL32UTF8'),
typ => 4353,
key => UTL_I18N.STRING_TO_RAW ('clavedesencript', 'AL32UTF8')
),
typ => 4353,
key => UTL_I18N.STRING_TO_RAW ('clavedesdecript', 'AL32UTF8')
)
)
FROM dual;
SELECT TRANSLATE(
'HOLA MUNDO', -- Mensaje a codificar
'ABCDEFGHIJKLMNOPQRSTUVWXYZ ',
'1234567890!@#$%^&*()-=_+;,.') ENCODED_MESSAGE
FROM DUAL
/
SELECT TRANSLATE(
' 8%@1.#-$4%', -- Mensaje a decodificar
'1234567890!@#$%^&*()-=_+;,.',
'ABCDEFGHIJKLMNOPQRSTUVWXYZ ') DECODED_MESSAGE
FROM DUAL
/
9. Usando DBMS_CRYPTO
DECLAREinput_string VARCHAR2 (200) := 'Mensaje sin Encriptar';output_string VARCHAR2 (200);encrypted_raw RAW (2000); -- stores encrypted binary textdecrypted_raw RAW (2000); -- stores decrypted binary textnum_key_bytes NUMBER := 256/8; -- key length 256 bits (32 bytes)key_bytes_raw RAW (32); -- stores 256-bit encryption keyencryption_type PLS_INTEGER := -- total encryption typeDBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC+ DBMS_CRYPTO.PAD_PKCS5;BEGINDBMS_OUTPUT.PUT_LINE ( 'Cadena Original: ' || input_string);key_bytes_raw := DBMS_CRYPTO.RANDOMBYTES (num_key_bytes);encrypted_raw := DBMS_CRYPTO.ENCRYPT (src => UTL_I18N.STRING_TO_RAW (input_string, 'AL32UTF8'),typ =>encryption_type,key =>key_bytes_raw);
DBMS_OUTPUT.PUT_LINE ( 'CadenaEncriptada: ' || encrypted_raw); -- The encrypted value "encrypted_raw" can be used heredecrypted_raw := DBMS_CRYPTO.DECRYPT (src =>encrypted_raw,typ =>encryption_type,key =>key_bytes_raw );
output_string := UTL_I18N.RAW_TO_CHAR (decrypted_raw, 'AL32UTF8');
DBMS_OUTPUT.PUT_LINE ('CadenaDesencriptada: ' || output_string);END;
NOTA:Para ver los campos de salida activar la vista de DBMS, de la siguiente manera.
10. Crear un package llamado UTP_DBMS_CRYPTO _jra, que contenga las funciones de Encriptar y Desencriptar haciendo uso del paquete DBMS_CRYPTO.
DBMS_CRYPTO y comparación de características DBMS_OBFUSCATION_TOOLKIT
DBMS_CRYPTO se pretende sustituir a la DBMS_OBFUSCATION_TOOLKIT , proporcionando una mayor facilidad de uso y el apoyo a una serie de algoritmos para dar cabida a sistemas nuevos y existentes. Specifically, 3DES_2KEY and MD4 are provided for backward compatibility. En concreto, 3DES_2KEY y MD4 se proporciona por compatibilidad con versiones anteriores. It is not recommended that you use these algorithms because they do not provide the same level of security as provided by 3DES, AES, MD5, or SHA-1. No se recomienda el uso de estos algoritmos, ya que no proporcionan el mismo nivel de seguridad conforme a lo dispuesto por el 3DES, AES, MD5 o SHA-1.
select DBMS_CRYPTO.RANDOMBYTES (256/8)
from dual
select UTP_DBMS_CRYPTO_jra.FB_ENCRIPTAR('Mensaje sin Encriptar','2775F38A293BD6C6356CCD7470D4402EF9E3A8720A55F174597403D1492E3AF7')
from dual;
select utp_dbms_crypto_jra.fb_descencriptar('8217CC68B652A30B99846A5A62A09202C54FDABEFA158FF4B522E3E7042548BB','2775F38A293BD6C6356CCD7470D4402EF9E3A8720A55F174597403D1492E3AF7')
from dual;
select UTL_I18N.STRING_TO_RAW ('Paolafabiana', 'AL32UTF8')
from dual
11. El package creado en el paso 10, gradarlo en dos archivos(header y body), y luego ejecutar el comando wrap de la siguiente manera:(SOLO SI SE TIENE EL CLIENTE ORACLE)
D:\oracle\oraxx\bin>wrap iname=s:\encripta\[nombre_del_archivo.sql]oname=s:\encripta\[nombre_del_archivo_wrap.sql]
PL/SQL Wrapper: Release x.x.x.0.0 - Production on Jue Jun 02 11:49:58 2011
Copyright (c) Oracle Corporation 1993, 2000. All Rights Reserved.
Processing s:\encripta\funcion.sql to s:\encripta\funcion.cript
D:\oracle\oraxx\bin>
NOTA:El archivo wrap se ubica en la ruta del bin de la BD.
Ejercicios:
a. Crear un nuevo usuario que incluya la siguiente tabla:
IdNombreApellidoDNIFechaNacimientoSueldoDNI_OBFUSCATIONDNI_CRYPTOSueldo_OBFUSCATIONSueldo_CRYPTO
Los Campos DNI_OBFUSCATION, DNI_CRYPTO, Sueldo_OBFUSCATION y Sueldo_CRYPTO deben de tener los valores encriptados de acuerdo a las funciones OBFUSCATION y CRYPTO
b. Cargar los siguientes datos en la nueva tabla creada
Id Nombre Apellido DNI
FechaNacimiento Sueldo
1 Esteban Guzman 12345678 17/11/1976 14,000.002 Lisseth Angulo 87654321 01/01/1980 9,000.003 Jorge Aguilar 00987658 21/07/1970 11,000.004 Alicia Rodas 12312093 30/02/1981 9,500.005 Marely Barboza 98634234 09/08/1980 13,000.00
c. Completar las columnas restantes con las siguientes semillas
Tipo SemillaCRYPTO CaMiLiTaOBFUSCATION
PaolaFabiana
NOTA:Todas las ejecuciones de los paquetes de encriptación se debe de hacer desde el nuevo usuarioAdjunte todas las evidencias de la realización del ejercicio.Una vez terminado enviar lo(s) archivos a [email protected]