segunda-feira, 27 de dezembro de 2010

Utilizando MD5 em Criptográfia

Aqui desenvolvi com algumas pesquisas e montei umas Function para PHP para validação de logins ao Banco de Dados utilizando MD5, podem notar ele originalmente foi feito apenas para alimentar o md5 database md5.rednoize.com, porém você também pode utiliza-lo para efetuar pesquisas.

Código PHP:

#!/usr/bin/php -q
<?php
//Alterar a linha para #!/pathdophp/php -q -d short_open_tag=on
$servidor "md5.rednoize.com";
echo "\033[32m";
echo 
"------------------------------------\r\n";
echo 
"- md5hash - http://md5.rednoize.com -\r\n";
echo 
"- Criado por: Elder Stroparo     -\r\n";
echo 
"- E-Mail: seuemail[arroba]email.com     -\r\n";
echo 
"- Seg, 27 de Dezembro de 2010         -\r\n";
echo 
"------------------------------------\r\n";
settype($template"string");
//$template = "1234567890abcdefghijklmnopqrstuvwxyz"; //Letras e Numeros.
$template "123456789"//Somente numeros.
function GetRandomString($length) {
       global 
$template;
       
settype($length"integer");
       
settype($rndstring"string");
       
settype($a"integer");
       
settype($b"integer");
       for (
$a 0$a <= $length$a++) {
               
$b rand(0strlen($template) - 1);
               
$rndstring .= $template[$b];
       }
       return 
$rndstring;
}
if (
$argc<3) {
echo 
"\r\n";
echo 
"Para \"quebrar\" uma md5 use ".$argv[0]." -m\r\n";
echo 
"Para adicionar uma nova senha ao banco de dados (md5.rednoise.com) utilize: ".$argv[0]." -q\r\n";
echo 
"[#] Alimentando o banco de dados...\r\n";
echo 
"[!] Para finalizar pressione CTRL+C\r\n\r\n";
while (
1) {
$rand GetRandomString(7);
echo 
$rand;
echo 
" - ";
echo 
file_get_contents("http://$servidor/?p&q=$rand");
echo 
"\r\n";
}
}
if (
$argv[1] == "-m") {
$q $argv[2];
echo 
"[!] Consultando servidor...";
echo
"\r\n";
echo 
"[*] A senha é: ";
echo 
file_get_contents("http://$servidor/?p&q=$q&b=MD5-Search");
echo 
"\r\n";
}
if (
$argv[1] == "-q") {
$q $argv[2];
echo 
"[*] Senha $q - md5: ";
echo 
file_get_contents("http://$servidor/?p&q=$q");
echo 
"\r\n[!] Adicionada com sucesso!";
echo
"\r\n";
}
?>


Bom espero que tenham gostando deste exemplo em PHP, ai está um modelo de como utilizar o MD5, ele está alimentando o bando de dados e gerando uma sequencia diretamente do servidor http://md5.rednoize.com (MD5 HASH).


Funções de Criptográfia

Bom vou falar hoje um pouco sobre o termo Funções de Criptográfia que é meios de proteger as informações armazenadas em um Banco de Dados.

Os Banco de Dados são muito importante eles utilizam para armazenar diversos tipos de informações, desde dados sobre uma conta de e-mail até dados importantes da Receita Federal. Para tal existem diversos tipos, os quais variam em complexidade e sobre tudo em segurança.

A Criptográfia são técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário, oque atorna difícil de ser lida por alguém não autorizado. Assimsendo, só o receptor da mensagem pode ler a informação com facilidade.

Visão Geral: a criptografia tem quatro objetivos principais

confidencialidade da mensagem: só o destinatário autorizado deve ser capaz de extrair o conteúdo da mensagem da sua forma cifrada. Além disso, a obtenção de informação sobre o conteúdo da mensagem (como uma distribuição estatística de certos caracteres) não deve ser possível, uma vez que, se o for, torna mais fácil a análise criptográfica.

integridade da mensagem: o destinatário deverá ser capaz de determinar se a mensagem foi alterada durante a transmissão.

autenticação do remetente: o destinatário deverá ser capaz de identificar o remetente e verificar que foi mesmo ele quem enviou a mensagem.

não-repúdio ou irretratabilidade do emissor: não deverá ser possível ao emissor negar a autoria da mensagem.

Nem todos os sistemas ou algoritmos criptográficos são utilizados para atingir todos os objetivos listados acima. Normalmente, existem algoritmos específicos para cada uma destas funções. Mesmo em sistemas criptográficos bem concebidos, bem implementados e usados adequadamente, alguns dos objetivos acima não são práticos (ou mesmo desejáveis) em algumas circunstâncias. Por exemplo, o remetente de uma mensagem pode querer permanecer anônimo, ou o sistema pode destinar-se a um ambiente com recursos computacionais limitados.

Comentando melhor sobre as funções de criptográfia Criptografia

Criptografia, MD2, MD4, SHA, Hash, MD5, MD6 (não utilizavél).

Criptografia

(Do Grego kryptós, "escondido", e gráphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade. É um ramo da Matemática, parte da Criptologia.

MD2

é um algoritmo de hash que cria um valor de hash de 128 bits funciona semelhante ao algoritmo de MD4 e foram desenvolvidos pela RSA Data Security, Inc.

MD4

é um algoritmo de hash que cria um valor de hash de 128 bits funciona semelhante ao algoritmo de MD2 e foram desenvolvidos pela RSA Data Security, Inc.
Ele foi desenvolvido em 1990, mas um ano após foi sucedido pelo MD5 por possuir falhas de segurança. A lógica desse algoritmo influenciou a criação de outros algoritmos como o MD5, SHA-1 e o RIPEMD. O MD4 também é usado para computar o hash de senhas em sistemas Microsoft NT.

SHA

(Secure Hash Algorithm) está relacionada com as funções criptográficas. A função mais usada nesta família, a SHA-1, é usada numa grande variedade de aplicações e protocolos de segurança, incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. SHA-1 foi considerado o sucessor do MD5. Ambos têm vulnerabilidades comprovadas. Em algumas correntes, é sugerido que o SHA-256 ou superior seja usado para tecnologia crítica. Os algoritmos SHA foram desenhados pela National Security Agency (NSA) e publicados como um padrão do governo Norte-Americano.

O primeiro membro da família, publicado em 1993, foi oficialmente chamado SHA; no entanto, é frequentemente chamado SHA-0 para evitar confusões com os seus sucessores. Dois anos mais tarde, SHA-1, o primeiro sucessor do SHA, foi publicado. Desde então quatro variantes foram lançadas com capacidades de saída aumentadas e um design ligeiramente diferente: SHA-224, SHA-256, SHA-384, e SHA-512 — por vezes chamadas de SHA-2.

Hash

é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando 1/2 byte cada. O conceito teórico diz que "hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações".

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que (o resultado da função de hash).

MD5

(Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer, em inglês) na verificação de integridade de arquivos e logins.

Foi desenvolvido em 1991 por Ronald Rivest para suceder ao MD4 que tinha alguns problemas de segurança. Por ser um algoritmo unidirecional, uma hash md5 não pode ser transformada novamente no texto que lhe deu origem. O método de verificação é, então, feito pela comparação das duas hash (uma da mensagem original confiável e outra da mensagem recebida). O MD5 também é usado para verificar a integridade de um arquivo através, por exemplo, do programa md5sum, que cria a hash de um arquivo. Isto pode-se tornar muito útil para downloads de arquivos grandes, para programas P2P que constroem o arquivo através de pedaços e estão sujeitos a corrupção dos mesmos. Como autenticação de login é utilizada em vários sistemas operacionais unix e em muitos sites com autentificação.

MD6

sobre a Criptografia MD6 MD6 (Message-Digest algorithm 6) é uma função hash criptográfico. Ele usa uma árvore de Merkle-como a estrutura, e em 2008, Ronald Rivest e outros, publicaram uma nova versão do algoritmo o MD6 com hash de tamanhos 224, 256, 384 ou 512 bytes. O algoritmo MD6 iria participar do concurso para ser o novo algoritmo SHA-3, porém após removeu-o do concurso por considera-lo muito lento, anuncionado que os computadores de hoje são muito lentos para usar o MD6.

Em breve estarei postando as funções de criptográfia de acordo com cada algoritimo

segunda-feira, 20 de dezembro de 2010

Procedures e Funções em PL/SQL


Bom pessoal a pedido de algumas pessoas está ai o tutorial sobre PL/SQL de uma maneira bem simples, utilizando a linguagem PL/SQL para fazer Procedures, e Functions.

Bom então vamos a luta.

Procedures e Funções


Uma função nada mais é do que pedaços de código, definidos pelo utillizador ou pré-definidos pela linguagem, utilizados para manipular dados. Aceitam um ou mais argumentos, devolvendo um valor. O argumento é uma constante, variável ou o nome de uma coluna. O valor devolvido serve para classificar a função: será numérica se o valor devolvido é numérico, char se devolve um char. As funções são utilizadas para manipular dados, tornando mais potentes as consultas. Dividem-se em três grandes grupos: manipulação de linhas, manipulação de grupos de linhas e funções analíticas. Dentro do primeiro grupo há funções para manipular caracteres, números, datas e funções que permitem converter dados de um tipo para outro. As funções de grupo permitem obter um valor que depende do grupo de linhas, por exemplo uma média, variância ou um máximo. As funções analíticas misturam os dois tipos anteriores: devolvem um valor por cada linha, mas esse valor depende do grupo.


E uma procedure nada mais é do um bloco PL/SQL nomeado. A grande vantagem sobre um bloco PL/SQL anônimo é que pode ser compilado e armazenado no banco de dados como um objeto de schema. Graças a essa característica as procedures são de fácil manutenção, o código é reutilizável e permitem que trabalhemos com módulos de programa.

Uma procedure é, então, um bloco
PL/SQL nomeado que pode aceitar argumentos (também chamado de parâmetros) e pode ser chamada por um programa, uma sessão SQL ou uma trigger.

Durante a instalação do banco de dados Oracle um script é executado automaticamente e cria toda a estrutura necessária para que as procedures sejam executadas. Eventualmente esse procedimento automático pode falhar devido a alguma falha física no disco rígido, nesse caso o usuário
SYS pode recriar a estrutura através do script SQL DBMSSTDX.SQL.

Para criar uma procedure o usuário precisa ter o privilégio de sistema
CREATE PROCEDURE, para criar a procedure em outros schemas o usuário deve ter o privilégio de CREATE ANY PROCEDURE. Este é um ponto muito interessante sobre as procedures, os privilégios para criação de procedures têm que ser concedidos explicitamente, ou seja, não pode ser adquirido através de roles.

Para executar uma procedure externa é necessário ter o privilégio de
EXECUTE. Caso queira alterar a procedure de outro schema deve ter o privilégio de sistema ALTER ANY PROCEDURE.

A sintaxe básica de uma procedure é:


CREATE [OR REPLACE] PROCEDURE [schema.]nome_da_procedure
[(parâmetro1 [modo1] tipodedado1,
parâmetro2 [modo2] tipodedado2,
...)]
IS|AS
Bloco PL/SQL


Onde:

REPLACE - indica que caso a procedure exista ela será eliminada e substituída pela nova versão criada pelo comando;

BLOCO PL/SQL - inicia com uma cláusula BEGIN e termina com END ou END nome_da_procedure;

NOME_DA_PROCEDURE - indica o nome da procedure;

PARÂMETRO - indica o nome da variável PL/SQL que é passada na chamada da procedure ou o nome da variável que retornará os valores da procedure ou ambos. O que irá conter em parâmetro depende de MODO;

MODO - Indica que o parâmetro é de entrada (IN), saída (OUT) ou ambos (IN OUT). É importante notar que IN é o modo default, ou seja, se não dissermos nada o modo do nosso parâmetro será, automaticamente, IN;

TIPODEDADO - indica o tipo de dado do parâmetro. Pode ser qualquer tipo de dado do SQL ou do PL/SQL. Pode usar referencias como %TYPE, %ROWTYPE ou qualquer tipo de dado escalar ou composto. Atenção: não é possível fazer qualquer restrição ao tamanho do tipo de dado neste ponto.

IS|AS - a sintaxe do comando aceita tanto IS como AS. Por convenção usamos IS na criação de procedures e AS quando estivermos criando pacotes.

BLOCO PL/SQL - indica as ações que serão executadas por aquela procedure.

Vamos ver um exemplo de procedure para ajudar nosso entendimento:


CREATE OR REPLACE PROCEDURE aumenta_sal (p_empno IN emp.empno%TYPE) IS
BEGIN
UPDATE
scott.emp
SET
sal = sal * 1.10
WHERE
empno = p_empno;
END aumenta_sal;
/


Neste exemplo estamos criando uma procedure para aumentar o salário de um funcionário em 10%. A primeira linha define o NOME DA PROCEDURE, que vai ser AUMENTA_SAL.

A linha dois define o parâmetro P_EMPNO no modo IN. Ou seja, vai ser um dado informado na chamada da procedure. Em seguida determinamos que ele será do mesmo tipo e tamanho que a coluna EMPNO da tabela EMP. Isso é feito através da referencia EMP.EMPNO%TYPE.

Podemos verificar o estado de nossa procedure através de uma simples consulta:


SELECT object_name, status
FROM user_objects
WHERE object_name LIKE '%AUMENTA%';/


Agora podemos verificar o funcionamento de nossa procedure:


SELECT empno, sal
FROM scott.emp;


EMPNO SAL
---------

7839 5000
7698 2850
7782 2450



CALL AUMENTA_SAL(7839);


Ou


EXECUTE AUMENTA_SAL(7839);



SELECT empno, sal FROM scott.emp;



EMPNO SAL
--------

7839 5500
7698 2850
7782 2450



Podemos notar que o salário do funcionário 7839 aumentou em 10%.


Funções


Sintaxe Básica:


CREATE [OR REPLACE] FUNCTION nome_da_função[( parameter1 [ mode1] datatype1,parameter2 [ mode2] datatype2,. . .)]RETURN tipo_de_dadoIS|ASBloco PL/SQL;


Ao contrário das procedures as funções tem que retornar ao menos um valor.


CREATE OR REPLACE FUNCTION pega_sal
(p_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_sal emp.sal%TYPE :=0;
BEGIN
SELECT sal
INTO v_sal
FROM scott.emp
WHERE empno = p_id;
RETURN v_sal;
END pega_sal;/


Executando


VARIABLE g_sal NUMBER
EXECUTE :g_sal := pega_sal(7839)
PRINT g_sal


Função para calcular CPMF


CREATE OR REPLACE FUNCTION cpmf(p_value IN NUMBER)
RETURN NUMBER IS

BEGIN
RETURN (p_value * 0.038);
END cpmf;
/
SELECT empno, ename, sal, cpmf(sal)
FROM scott.emp
WHERE deptno = 10;


 Copyright © 2008-2010 All Right Reserved - Todos os Direitos Reservados Elder Stroparo