Criptografia

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Mensagemem Qui, 30 Set 2004 4:43 pm

Gostaria de saber como q faço para criptografar uma senha e depois poder descriptografar. Como posso fazer isso?! existe alguma função do Oracle ou teria q criar algum script para isso?!
LC_JK
Localização: São Paulo

Mensagemem Sex, 01 Out 2004 11:44 am

Depende o caso... Você disse que quer criptografar uma senha e depois descriptografar. Nesse caso, a melhor forma é usar um HASH, ou seja, você gera uma chave única da sua senha que é impossível de descriptografar. Daí, você apenas compara essa chave com a chave que o usuário digitou... (dessa forma, nem mesmo um DBA ou as pessoas que criaram o sistema conseguem ver a senha que o user cadastrou).

Aqui tem um exemplo, tirado do AskTom:
http://asktom.oracle.com/pls/ask/f?p=49 ... 5412348059

Código: Selecionar todos
declare
  function digest( p_username in varchar2, p_password in varchar2 ) return varchar2
  is
  begin
    return ltrim( to_char( dbms_utility.get_hash_value(
      upper(p_username)||'/'||upper(p_password),
      1000000000,
      power(2,30) ),
      rpad( 'X',29,'X')||'X' ) );
  end digest;
begin
  for x in ( select username from all_users where rownum < 20 )
  loop
    dbms_output.put_line( 'User: ' || rpad( x.username , 30 ) ||
                          ' digest: ' || digest( x.username, 'TIGER' )
    );
  end loop;
end;
/
User: SYS                            digest: 6869FA1A
User: SYSTEM                         digest: 79F08AFC
User: OUTLN                          digest: 5ABFB255
User: DBSNMP                         digest: 43415F6B
User: TRACESVR                       digest: 49CF26F6
User: CTXSYS                         digest: 4910C297
User: OEM                            digest: 69463BC2
User: ORDSYS                         digest: 6F048B2B
User: ORDPLUGINS                     digest: 6547459C
User: MDSYS                          digest: 43C0B367
User: AURORA$ORB$UNAUTHENTICATED     digest: 5073BBFC
User: WEB$CDEJESUS                   digest: 6FB5CDB6
User: SCOTT                          digest: 4307767C
User: WEB$SMAYFIEL                   digest: 71ED5065
User: UTILS                          digest: 5B7912B7
User: OAS_PUBLIC                     digest: 502BAE3A
User: WEBDB                          digest: 5A7AC149
User: WEB$RDRISCOL                   digest: 3E72D3F6
User: WEB$KWARREN                    digest: 7123F5A1

PL/SQL procedure successfully completed.



Agora, se você quer criptografar E descriptografar informações (por exemplo, a coluna de salários dos funcionários). Daí você pode usar uma DBMS do oracle. A Obfuscation toolkit. Este exemplo também foi tirado do asktom...
http://asktom.oracle.com/pls/ask/f?p=49 ... 1026226790

Código: Selecionar todos
ops$tkyte@DEV816> variable x varchar2(25)
ops$tkyte@DEV816>
ops$tkyte@DEV816> exec :x := 'How Now Brown Cow';

PL/SQL procedure successfully completed.

ops$tkyte@DEV816>
ops$tkyte@DEV816> declare
  2      l_data  varchar2(255);
  3  begin
  4      l_data := rpad( :x, (trunc(length(:x)/8)+1)*8, chr(0) );
  5 
  6      dbms_obfuscation_toolkit.DESEncrypt
  7          ( input_string => l_data,
  8        key_string   => 'MagicKey',
  9        encrypted_string=> :x );
10  end;
11  /

PL/SQL procedure successfully completed.

ops$tkyte@DEV816>
ops$tkyte@DEV816> print x

X
-------------------------
Òr
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Sex, 07 Out 2005 2:42 pm

Eu venho do mysql , onde tem a função crypt() e a md5().
Apenas quero guardar as senhas dos usuarios de um sistema escrito em delphi, mas como tenho uma parte escrita e php, quero que esta criptografia seja feita pelo banco
albandes
Localização: Pelotas - RS

---
Rogerio Albandes
PipeGrep Conectividade Ip - www.pipegrep.com.br
Fone: 53 3222-3366 Cel: 53 8401-4872

Mensagemem Sex, 07 Out 2005 2:48 pm

Infelizmente no ORACLE essa função não existe. Você terá que criar uma própria. (Essa DBMS usada no segundo exemplo acima é a solução p/ o seu problema: dbms_obfuscation_toolkit.

Ela é instalada junto com o ORACLE. Dá uma estudada nela! Qualquer dúvida, manda pra gente! Mas basicamente o que você tem que fazer, é criar uma função com as rotinas usadas nesse exemplo acima... (Que encripta e desencripta)...

:-o
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Qui, 13 Out 2005 12:22 pm

Este pacote de criptografia aceita qual tamanho maximo de texto para ser criptografado. Fiz um teste por aqui com um texto e com um atmanho de chave e se aumentasse o tamanho e diminuisse o tamanho da chave ou do texto dava erro.

Tem alguma referencia sobre tamanho ideal de chave e de texto.

Outra coisa, quando damos um wrap no codigo o que estiver entre aspas (texto) ele não e wrapeado. Fica visivel, alguma dica?
alexander
Localização: Rio de Janeiro

Mensagemem Sex, 14 Out 2005 2:25 pm

Poxa, não to tendo tempo pra testar aqui o tamanho máximo. Só sei que deve ser múltiplo de 8 caracteres. (veja o exemplo, tem um RPDAD que preenche com chr(0) a string.
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Mensagemem Qui, 09 Fev 2012 3:33 pm

Boa tarde pessoal, sou novo em Oracle, e não entendi muito bem a parte de criptografia, sei que existe pacotes no Oracle que podem ser utilizados para fazer esta operação. Mas como faço para criar uma funçao utilizando o DBMS_OBFUSCATION_TOOLKIT.DESEncrypt? Eu teria que utilizar uma função para encriptar e outra para desencriptar é isso?, no caso DBMS_OBFUSCATION_TOOLKIT.DESDecrypt?

alguém poderia me passar uma função de exemplo simples de função de criptografia, pois não entendi como usar esse o DBMS_OBFUSCATION_TOOLKIT :?

seria algo mais ou menos assim?

Código: Selecionar todos
CREATE OR REPLACE FUNCTION fn_criptografia
(
  p_login IN RAW
,p_senha IN RAW
,p_senha_encriptada OUT RAW
) RETURN RAW AS
  v_result RAW(128);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt (p_login, p_senha, p_senha_encriptada);

RETURN v_result;
END;



Agradeço desde já o/
Maikew

Mensagemem Sex, 10 Fev 2012 7:51 am

Maikew escreveu:Boa tarde pessoal, sou novo em Oracle, e não entendi muito bem a parte de criptografia, sei que existe pacotes no Oracle que podem ser utilizados para fazer esta operação. Mas como faço para criar uma funçao utilizando o DBMS_OBFUSCATION_TOOLKIT.DESEncrypt? Eu teria que utilizar uma função para encriptar e outra para desencriptar é isso?, no caso DBMS_OBFUSCATION_TOOLKIT.DESDecrypt?

alguém poderia me passar uma função de exemplo simples de função de criptografia, pois não entendi como usar esse o DBMS_OBFUSCATION_TOOLKIT :?

seria algo mais ou menos assim?

CREATE OR REPLACE FUNCTION fn_criptografia
(
p_login IN RAW
,p_senha IN RAW
,p_senha_encriptada OUT RAW
) RETURN RAW AS
v_result RAW(128);
BEGIN
DBMS_OBFUSCATION_TOOLKIT.DESEncrypt (p_login, p_senha, p_senha_encriptada);

RETURN v_result;
END;


Agradeço desde já o/


Só gostaria de um exemplo bem simples, para depois eu criar a minha propria chave :)
Maikew

Mensagemem Ter, 28 Fev 2012 11:12 pm

Você poderá criar um função para utilizar MD5 dessa forma no oracle

Código: Selecionar todos
create or replace function fnc_md5 (p_valor varchar) return varchar2 is
     v_entrada varchar2(2000) := p_valor;
     hexkey varchar2(32) := null;
begin
   hexkey := rawtohex(dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw(v_entrada)));
   return nvl(hexkey,'');
end;
/
ricards
Localização: Araraquara-SP

Ricardo Neves
Analista e Instrutor Oracle Developer
Java Developer (JPA/JSF/Hibernate/WebServices/EJB)

Mensagemem Sex, 02 Mar 2012 3:31 pm

ricards escreveu:Você poderá criar um função para utilizar MD5 dessa forma no oracle

Código: Selecionar todos
create or replace function fnc_md5 (p_valor varchar) return varchar2 is
     v_entrada varchar2(2000) := p_valor;
     hexkey varchar2(32) := null;
begin
   hexkey := rawtohex(dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw(v_entrada)));
   return nvl(hexkey,'');
end;
/


Obrigado. Eu já conhecia essa função de MD5, porém eu preciso desencriptar a senha, preciso do valor original dela, pois eu não vou comparar o valor do hash com outro hash gerado a partir da senha digitada, vou precisar usar a senha original em outro local, só queria um exemplo de como construir uma chave, o mais simples possivel de como utilizar a dbms_obfuscation_toolkit.DESEncrypt() e dbms_obfuscation_toolkit.DESDEcrypt() se possível.

:)
Maikew

Mensagemem Ter, 06 Mar 2012 1:40 pm

Do 10g em diante utilize o DBMS_CRYPTO.
O DBMS_OBFUSCATION_TOOLKIT já está descontinuado...

Abraços,
burga
Localização: SP

Ricardo H. Tajiri


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


      Voltar para PL/SQL

      Quem está online

      Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes