Вы находитесь на странице: 1из 13

Princpios de segurana Fase Requisitos Considerar a segurana "de baixo para cima" um princpio fundamental do desenvolvimento de sistemas seguros.

. Embora vrios projetos de desenvolvimento produzam "prximas verses" baseadas nas verses anteriores, a fase de requisitos e o planejamento inicial de uma nova verso oferecem a melhor oportunidade para criar software seguro. A perspectiva geral da equipe de produto sobre os objetivos, os desafios e os planos de segurana deve se refletir nos documentos de planejamento produzidos durante a fase de requisitos. Embora os planos estejam sujeitos a alteraes conforme o andamento do projeto, a articulao precoce desses planos ajuda a garantir que nenhum requisito seja desconsiderado ou estabelecido na ltima hora. Fase Projeto Identificar tcnicas de anlise, como a organizao em camadas, o uso de linguagem com rigidez de tipos, a aplicao de privilgios mnimos e a minimizao da superfcie de ataque, que se aplicam ao software globalmente. Documentar os elementos da superfcie de ataque do software, como o software no atingir uma segurana perfeita, importante que apenas os recursos que sero usados pela grande maioria dos usurios sejam expostos a todos eles por padro, e que esses recursos sejam instalados com o nvel de privilgio mais baixo possvel. Fase Implementao . Aplicar ferramentas de verificao de cdigo de anlise esttica. As ferramentas podem detectar alguns tipos de falhas de cdigo que resultam em vulnerabilidades, incluindo saturaes do buffer, de nmeros inteiros e variveis no inicializadas. Uma rede estvel e um breve treinamento obrigatrio para todos os provveis usurios do software, so essenciais. Fase Teste Durante essa fase, enquanto o software passa por testes beta, a equipe de produto tem que realizar um "esforo de segurana" que inclui revises do cdigo de segurana alm das concludas na fase de implementao, bem como testes de segurana direcionados. Fase Manuteno Parte do processo envolve avaliar relatrios de vulnerabilidades e lanar orientaes e atualizaes de segurana quando apropriado. O outro componente do processo a conduo de um post-mortem das vulnerabilidades relatadas e a adoo de medidas, conforme necessrio. As medidas em resposta a uma vulnerabilidade variam de emitir uma atualizao para um erro isolado at atualizar as ferramentas de verificao de cdigo e iniciar revises do cdigo dos principais subsistemas.

Relatrio: Desenvolvendo Softwares Seguros. medida que as aplicaes passaram a ser baseada na Web, a segurana de software foi ganhando fora. Com a constante atividade de invasores, desenvolver um software seguro se tornou fundamental. A segurana em aplicaes visa manter a confidencialidade, integridade e disponibilidade dos recursos de informao a fim de permitir que as operaes de negcios sejam bem sucedidas. Geralmente mais barato construir software seguro do que corrigir as vulnerabilidades de segurana aps a entrega do software. Para desenvolver um software seguro necessria a adoo de mtodos que garantam a qualidade durante todas as etapas do desenvolvimento, alm da realizao de uma anlise do processo de desenvolvimento de software. Normalmente, uma m gesto no processo de desenvolvimento de software pode levar a um cdigo mal estruturado e por sua vez a problemas de segurana. Por outro lado, software de qualidade desenvolvido com uma abordagem estruturada e ferramentas de apoio.

Alguns Itens de boas prticas de Segurana que auxiliam no desenvolvimento de softwares:

I. Gerenciamento de Cdigo Fonte: uma ferramenta que permite organizar a interao entre desenvolvedores, garantir a integridade e possibilitar gerenciar verses do cdigo, evitando equvocos. II. Realizao e Teste: So vrios testes de trechos pequenos at a o final do software, e depois o teste de avaliao final de software. III. Gerenciamento de correo de bugs: A utilizao de uma ferramenta de bugs Tracking permite manter registro das falhas encontradas no sistema e facilitar a comunicao e correo de bugs. IV. Utilizao do processo de integrao contnua: Essa prtica visa garantir a qualidade no software desenvolvido, Automatizando verificaes no processo de build da ferramenta, garantindo assim que seja possvel gerar um novo release com o mnimo possvel de bugs. V. Documento do software e da arquitetura que o suporta: Uma documentao clara da arquitetura e cdigo fonte ajuda a aumentar a qualidade do software desenvolvido. Uma documentao clara, objetiva e bem estruturada de fundamental importncia para que o software possa ser expandido de forma sustentvel e seguro.

Relatrio 2: Evitando Estouro de Buffer:

Em segurana computacional e programao de dados ou estouro de buffer (do ingls buffer overflow ou buffer overrun) uma anomalia onde um programa, ao escrever dados em um buffer, ultrapassa os limites do buffer e sobrescreve a memria adjacente. Esse um caso especial de violao de segurana de memria. Estouros de buffer podem ser disparados por entradas que so projetadas para executar cdigo, ou alterar o modo como o programa funciona. Isso pode resultar em comportamento errado do programa, incluindo erros de acesso memria, resultados incorretos, parada total do sistema, ou uma brecha num sistema de segurana. Portanto, eles so a base de muitas vulnerabilidade de software e pode ser explorados maliciosamente. Linguagens de programao comumente associadas com transbordamentos de dados incluem C e C++, as quais no proveem proteo contra acesso ou sobrescrita de dados em qualquer parte da memria e no checam automaticamente se dados escritos em um array (cadeia de elementos o tipo de buffer dessas linguagens) esto nos limites do array. Checagem de limites pode prevenir transbordamentos de dados.

Relatrio: Utilizando criptografia Criptografia o estudo dos princpios e tcnicas pelas quais a informao pode ser transformada da sua forma original para outra ilegvel, de forma que possa ser conhecida apenas por seu destinatrio (detentor da "chave secreta"), o que a torna difcil de ser lida por algum no autorizado. Assim sendo, s o receptor da mensagem pode ler a informao com facilidade. um ramo da Matemtica, parte da Criptologia. H dois tipos de chaves criptogrficas: chaves simtricas e chaves assimtrica. Uma informao no-cifrada que enviada de uma pessoa (ou organizao) para outra chamada de "texto claro" (plaintext). Cifragem o processo de converso de um texto claro para um cdigo cifrado e decifragem o processo contrrio, de recuperar o texto original a partir de um texto cifrado. De facto, o estudo da criptografia cobre bem mais do que apenas cifragem e decifragem. um ramo especializado da teoria da informao com muitas contribuies de outros campos da matemtica e do conhecimento, incluindo autores como Maquiavel, Sun Tzu e Karl von Clausewitz. A criptografia moderna basicamente formada pelo estudo dos algoritmos criptogrficos que podem ser implementados em computadores. Formas de criptografia Criptografia clssica Podemos dizer que o uso da criptografia to antigo quanto a necessidade do homem em esconder a informao. Muitos pesquisadores atribuem o uso mais antigo da criptografia conhecido aos hierglifos usados em monumentos do Antigo Egito (cerca de 4500 anos atrs). Diversas tcnicas de ocultar mensagens foram utilizadas pelos gregos e romanos. A criptografia pr-computacional era formada por um conjunto de mtodos de substituio e transposio dos caracteres de uma mensagem que pudessem ser executados manualmente (ou at mesmo mentalmente) pelo emissor e pelo

destinatrio da mensagem. O surgimento de mquinas especializadas e, posteriormente, dos computadores ocasionou uma significativa evoluo das tcnicas criptogrficas. Criptografia moderna A era da criptografia moderna comea realmente com Claude Shannon, possivelmente o pai da criptografia matemtica. Em 1949 ele publicou um artigo Communication Theory of Secrecy Systems com Warren Weaver. Em 1976 aconteceram dois grandes marcos da criptografia para o pblico. O primeiro foi a publicao, pelo governo americano, do DES (Data Encryption Standard), um algoritmo aberto de criptografia simtrica, selecionado pela NIST em um concurso onde foi escolhido uma variante do algoritmo Lucifer, proposto pela IBM. O DES foi o primeiro algoritmo de criptografia disponibilizado abertamente ao mercado. O segundo foi a publicao do artigo New Directions in Cryptography por Whitfield Diffie e Martin Hellman, que iniciou a pesquisa em sistemas de criptografia de chave pblica. Este algoritmo ficou conhecido como "algoritmo Diffie-Hellman para troca de chaves" e levou ao imediato surgimento de pesquisas neste campo, que culminou com a criao do algoritmo RSA, por Ronald Rivest, Adi Shamir e Leonard Adleman. O segundo foi a publicao do artigo New Directions in Cryptography por Whitfield Diffie e Martin Hellman, que iniciou a pesquisa em sistemas de criptografia de chave pblica. Este algoritmo ficou conhecido como "algoritmo Diffie-Hellman para troca de chaves" e levou ao imediato surgimento de pesquisas neste campo, que culminou com a criao do algoritmo RSA, por Ronald Rivest, Adi Shamir e Leonard Adleman Criptografia quntica Desenvolvimento da tcnica reunindo o conceito de criptografia e a teoria quntica mais antigo do que se imagina, sendo anterior descoberta da criptografia de Chave Pblica. Stephen Wiesner escreveu um artigo por volta de 1970 com o ttulo: "Conjugate Coding" que permaneceu sem ser publicado at o ano de 1983. Em seu artigo, Wiesner explica como a teoria quntica pode ser usada para unir duas mensagens em uma nica transmisso quntica na qual o receptor poderia decodificar cada uma das mensagens porm nunca as duas simultaneamente, pela impossibilidade de violar uma lei da natureza. Utilizando-se pares de ftons, a criptografia quntica permite que duas pessoas escolham uma chave secreta sem jamais terem se visto, trocado alguma mensagem ou mesmo algo material. A criptografia quntica oferece a possibilidade de gerar uma chave segura se o sinal um objeto quntico, assim, o termo mais correto seria Distribuio de Chave Quntica (Quantum Key Distribution - QKD) e no Criptografia Quntica. interessante notar que a Criptologia atual est amparada na Matemtica mas com a introduo desse conceito de mensagens criptografadas por chaves qunticas a fsica passou a ter importncia primordial no tema. O maior problema para implementao da Criptografia quntica ainda a taxa de erros na transmisso dos ftons seja por via area ou fibra tica. Os melhores resultados obtidos atualmente se do em cabos de fibra tica de altssima pureza, e conseqentemente elevadssimo custo tambm, alcanando algo em torno de 70 km. Referencia: Autor: Cssio Mazzochi Molin Artigo do Seminrio de Segurana em Desenvolvimento de Sistemas 2011-2 Origem do artigo: Micreiros.Com | Reviso Thiarlei Macedo

Evitando Ataques SQL INJECTION A SQL - Structured Query Language - largamente usada para interagir com banco de dados relacionais. Se voc considerar que 90% das aplicaes utilizam banco de dados com suporte a SQL vai concluir que o uso da SQL quase uma unanimidade por ser prtica , fcil e porttil. Ao colocar sua aplicao na Web voc a esta expondo a um acesso mais amplo e indiscriminado. Afinal qualquer um que tenha acesso a url do site ter acesso a sua aplicao e aos dados que ela disponibiliza. Pensando na segurana de suas informaes as empresas investem pesado em firewalls , certificao digital e outros recursos , com o objetivo de se proteger de invasores. Para que o controlar o acesso as informaes normalmente restringe-se o acesso aos usurios cadastrados usando um nome e senha para identificao ; estes dados so colhidos atravs de um formulrio de login e so ento verificados com as informaes armazenadas em um banco de dados dos usurios cadastrados; se estiverem corretas o acesso permitido caso contrrio o acesso negado. assim que funciona o home banking na internet e uma infinidade de outras aplicaes web na qual o acesso restrito. Voc pode ter o aparato mais moderno em termos de tecnologia de segurana protegendo o seu site de um ataque hacker e nem se dar conta de que a vulnerabilidade da sua aplicao esta ali naquele formulrio de login. Ele pode ser a porta de entrada para ataques maliciosos atravs da injeo de SQL. A injeo SQL ocorre quando um invasor consegue inserir comandos SQL na instruo SQL que voc usa no seu script de modo a burlar a restrio e ter acesso ou danificar as informaes armazenadas no seu banco de dados. Como ocorre a injeo SQL Se voc acha que no deve levar a srio a injeo SQL veja esta notcia da INFO: Abaixo temos um tpico formulrio de login : | form name="frmLogin" action="login.asp" method="post"> Nome : <input type="text" name="nomeUsuario"> Senha: <input type="text" name="senhaUsuario"> <input type="Enviar"> </form> | Geralmente quando o usurio clicar no boto - Enviar - o script login.asp ser executado para efetuar a validao dos dados informados. Abaixo temos um script tpico para um arquivo de validao de informaes: <% dim nomeUsuario, senhaUsuario, consulta dim conn, rS nomeUsuario = Request.Form("nomeUsuario") senhaUsuario = Request.Form("senhaUsuario") set conn = server.createObject("ADODB.Connection") set rs = server.createObject("ADODB.Recordset")

consulta = "select count(*) from usuarios where nomeUsuario='" & nomeUsuario & "' and senhaUsuario='" & senhaUsuario & "'" conn.Open "Provider=SQLOLEDB; Data Source=(local);Initial Catalog=myDB; User Id=sa; senhaUsuario=" rs.activeConnection = conn rs.open consulta if not rs.eof then response.write "Acesso Concedido" else response.write "Acesso Negado" end if %> Vamos analisar o que ocorre quando um usurio tenta se autenticar. Vamos supor que ele usurio cadastrado com nome Macoratti e senha 123456 (s suposio). Ao informar o nome e a senha e clicar no boto Enviar o script do arquivo login.asp ser executado. Vamos ver como ficou a instruo SQL montada neste caso : select count(*) from usuarios where nomeUsuario='macoratti' and senhaUsuario='123456' Neste caso o usurio macoratti, senha 123456 ser autenticado e ter acesso ao sistema. Tubo bem ? No , se voc usa este tipo de instruo SQL nada esta bem pois o texto final da consulta SQL depende inteiramente do contedo das variveis , e , se o contedo destas variveis no for validado e tratado o texto final concatenado poder ser um SQL adulterado atravs de uma injeo SQL. Quer ver ? Vou comear pegando leve. Vamos supor que um hacker decidiu invadir sua pgina. Uma das primeiras coisas que ele pode fazer tentar uma injeo SQL , e, vai comear verificando se voc esta tratando o apstrofe (aspa simples: '). Se voc no sabe a presena de um caractere de apstrofe (') no contedo de uma varivel concatenada no SQL usada para delimitar strings de texto. Ento suponha que ele digite os seguintes dados nos campos nome e senha: nome = tes'te senha = Se voc no tratar o apstrofe vai ocorrer um erro de SQL (incorrect Sintax) ,e , vendo isto o hacker vai ficar mais animado... Agora vou pegar pesado. Suponha ento que a seguir ele digite os seguintes dados nome = ' ; drop table users-senha = Este comando ir excluir a tabela users (se ela existir). E se voc pensa que muito difcil o hacker adivinhar o nome da sua tabela vou mostrar mais abaixo que ele pode fazer isto de uma maneira simples. Isto possvel pois o caractere (;) indica o fim de uma consulta e o comeo de outra em T-SQL , e , o caractere (--) no final da linha faz com que o scrpt ASP seja executada sem erro. Continuando o ataque , ele pode tambm informar o seguinte :

nome = admin senha = ' or 1=1-veja como vai ficar a consulta SQL montada: select count(*) from usuarios where nomeUsuario='admin' and senhaUsuario='' or 1=1-' Aqui a consulta ir verificar se o nome do usurio admin e se senha vazio ou 1 for igual a 1 ( o que verdade) ; bingo, se existir um usurio admin ele entrou no seu sistema. Ele pode tambm tentar o seguinte : nome = ' or 1=1-senha = a consulta SQL montada ser : select count(*) from usuarios where nomeUsuario='' or 1=1 --' and senhaUsuario='' e bingo , ele burlou o seu sistema. O hacker pode tambm tentar o seguinte : nome = ' OR "=' senha = ' OR "=' e a consulta SQL montada ser : select count(*) from usuarios where nomeUsuario='' OR "=" AND senhaUsuario='' OR "=" a consulta agora esta fazendo a comparao : OR "=" que sempre verdadeira. Bingo ele entrou no seu site. Para saber o nome das tabelas e campos o hacker pode fazer o seguinte : nome = ' having 1=1-senha = isto pode causar o seguinte erro: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft] [ODBC SQL Server Driver] [SQL Server] Column 'usuarios.codigo' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /login.asp , line 28 e bingo , o hacker agora sabe que o nome da tabela usurios e o nome do campo relacionado no formulrio como nome cdigo ento , o que voc acha que ele vai fazer ? Fazer a mesma coisa para o campo senha e ento ele vai saber o nome da tabela e dos campos relacionados ao formulrio. Imagine o estrago que ele no ser capaz de fazer agora... Pensa que ele pode ficar somente nisto. J conhecendo o nome da tabela e das colunas se o hacker quiser saber o tipo de dados do campo ele pode fazer o seguinte : nome = ' UNION SELECT SUM(nomeUsuario) FROM usuarios-senha = Como o SQL Server vai tentar aplicar a clusula SUM antes de determinar se o nmero dos campos nas duas colunas igual. Ao tentar fazer um SUM em um campo texto o sistema pode emitir a seguinte mensagem de erro: Microsoft OLE DB Provider for ODBC Drivers error '80040e7' [Microsoft] [ODBC SQL Server Driver] [SQL Server] The Sum or average aggregate operation cannot take a varchar data type as na argument. /login.asp , line 109

e bingo de novo , ele agora sabe o tipo de dado do campo nomeUsuario. Agora sabe o que ele vai fazer ? Vai inserir um usurio com nome senha para se logar , assim : nome = ' ; INSERT INTO usuarios VALUES('hacker','111111')-senha = E bingo , ele vai se logar como hacker e senha 111111. Como evitar uma ataque de injeo SQL A seguir algumas orientaes de como voc pode evitar um ataque de injeo SQL : 1- Estabelea uma poltica de segurana rgida e criteriosa limitando o acesso dos seus usurios. Isto quer dizer que voc deve dar somente os poderes necessrios aos seus usurios. No de acesso de escrita a tabelas e d somente acesso as tabelas que o usurio vai precisar. 2- Faa a validao da entrada de dados no formulrio e no permita os caracteres invlidos como : (') , (--) e (;) nem de palavras maliciosas como insert , drop , delete, xp_ . Abaixo algumas funes que voc pode usar: - Substituindo o apstrofe(') pelo duplo apstrofe ('') <%Function ExpurgaApostrofe(texto) ExpurgaApostrofe = replace( texto , "'" , "''") End function%> | - Substituindo os caracteres e palavras maliciosas por vazio(""). <% Function LimpaLixo( input ) dim lixo dim textoOK lixo = array ( "select" , "drop" , ";" , "--" , "insert" , "delete" , "xp_") textoOK = input for i = 0 to uBound(lixo) textoOK = replace( textoOK , lixo(i) , "") next LimpaLixo = textoOKend Function %> | - Rejeitando os dados maliciosos: <% Function ValidaDados( input ) lixo = array ( "select" , "insert" , "update" , "delete" , "drop" , "--" , "'") ValidaDados = true for i = lBound (lixo) to ubound(llixo) if ( instr(1 , input , lixo(i) , vbtextcompare ) <> 0 ) then ValidaDados = False exit function} end if next end function %> | 3- Limite a entrada de texto para o usurio no formulrio de entrada de dados. Se o campo nome deve ter somente 10 caracteres restrinja a isto a entrada de dados no formulrio. O mesmo vale para a senha; 4- Faa o tratamento adequado de erros no permitindo que mensagens de erros exponham informaes sobre a estrutura dos seus dados; 5- Faa um log para auditoria dos erros ocorridos e das operaes mais importantes da aplicao; 6- Sempre valide entrada de usurio testando tipo, comprimento, formato e intervalo;

7- Nunca construa instrues SQL ou Transact-SQL diretamente da entrada do usurio; 8- Use procedimentos armazenados (stored Procedures) para validar entrada de usurio; 9- Nunca concatene entrada de usurio que no seja validada. A concatenao de cadeia de caracteres o ponto principal de entrada de injeo de script; 10 - Teste o contedo de variveis de cadeia de caracteres e s aceite valores esperados. Rejeite entradas que contenham dados binrios, seqncias de escape e caracteres de comentrio. Isso pode ajudar a impedir injeo de script e proteger contra exploraes de excesso de buffer; Evitando ataques RCP e DDOS Dentre as estratgias recomendadas pode-se considerar as seguintes: Incrementar a segurana do host Sendo que a caracterstica principal deste ataque a formao de uma rede de mquinas comprometidas atuando comomasters e agentes, recomenda-se fortemente aumentar o nvel de segurana de suas mquinas, isto dificulta a formao da rede do ataque. Instalar patches Sistemas usados por intrusos para executar ataques so comumente comprometidos via vulnerabilidades conhecidas. Assim, recomenda-se manter seus sistemas atualizados aplicando os patches quando necessrio. Aplicar filtros "anti-spoofing" Durante os ataques, os intrusos tentam esconder seus endereos IP verdadeiros usando o mecanismo de spoofing, que basicamente consite em forjar o endereo origem, o que dificulta a identificao da origem do ataque. Limitar banda por tipo de trfego Alguns roteadores permitem limitar a banda consumida por tipo de trfego na rede. Nos roteadores Cisco, por exemplo, isto possvel usando CAR (Commited Access Rate). No caso especfico de um ataque DDoS que lana um flood de pacotes ICMP ou TCP SYN, por exemplo, voc pode configurar o sistema para limitar a banda que poder ser consumida por esse tipo de pacotes. Prevenir que sua rede seja usada como "amplificadora" Sendo que algumas das ferramentas podem lanar ataques smurf (ou fraggle), que utilizam o mecanismo de envio de pacotes a endereos de broadcasting, recomendase que sejam implementadas em todas as interfaces dos roteadores diretivas que previnam o recebimento de pacotes endereados a tais endereos. Isto evitar que sua rede seja usada como "amplificadora". Estabelecer um plano de contingncia Partindo da premisa que no existe sistema conectado Internet totalmente seguro, urge que sejam considerados os efeitos da eventual indisponibilidade de algum dos sistemas e se tenha um plano de contingncia apropriado, se necessrio for. Planejamento prvio dos procedimentos de resposta Um prvio planejamento e coordenao so crticos para garantir uma resposta adequada no momento que o ataque est acontecendo: tempo crucial! Este planejamento dever incluir necessariamente procedimentos de reao conjunta com o seu provedor de backbone.

Testes de Segurana e Instalao de Software Seguros O teste, nos projetos de software livre, realizado pelos prprios desenvolvedores e por usurios entusiasmados. Esta uma fora muito importante para os projetos de software livre, e se bem utilizada e orientada pode encontrar problemas de segurana antes do lanamento de uma nova verso facilmente. Basicamente, tudo o que precisa ser feito explicitamente orientar todos os usurios e desenvolvedores testando uma verso alfa ou beta que realizem testes especficos de segurana. Estes testes podem ser automatizados tambm por ferramentas j existentes como scanners de vulnerabilidade para aplicaes web, geradores de entrada aleatrias e etc Estes testes podem ser distribudos entre grupos de usurios interessados e o processo vai rapidamente gerar frutos. Dentre as tcnicas mais conhecidas esto: Caixa-branca, caixa branca, caixa cinza e regresso. A anlise de risco e as rvores de ataque podem ser utilizados como guias das partes que precisam ser mais testadas por segurana, e como o ciclo de desenvolvimento em software livre contnuo o sistema deve ser realimentado com informaes de vulnerabilidades encontradas e corrigidas nas verses passadas, testando novamente as correes para garantir um aproveitamento total do teste. Uma maneira vivel para se assegurar a melhoria de tais processos seria tomar como base modelos sugeridos por entidades internacionais respeitadas no assunto. Dentro de uma gama de modelos, sejam eles para situaes e ambientes especficos ou para solues genricas, existem alguns que so mais utilizados e tidos como eficientes, como por exemplo os SW-CMM, SE-CMM, ISO/IEC 15504 e o mais conhecido CMMI. De acordo com um estudo conduzido pelo NIST em 2002, os defeitos resultam num custo anual de 59,5 bilhes de dlares economia dos Estados Unidos. Mais de um tero do custo poderia ser evitado com melhorias na infraestrutura do teste de software. Importncia da fase de implementao de um software Durante a fase de implementao a equipe de projeto codifica, testa e integra todos os mdulos do software, nesta fase muito importante ficar atento as falhas de segurana, para evitar possveis vulnerabilidades. Para garantir uma vida segura para o software necessrio seguir um ciclo durante a sua implementao, tal ciclo composto por 4 variveis: Empregar padres de codificao e teste Empregar ferramentas de teste de segurana incluindo fuzzing Empregar ferramentas de anlise esttica de cdigo Revisar o cdigo ETAPA 2 Mtodos de criptografia MD5 Retorna um hash de 32 caracteres hexadecimal.

A vantagem de utiliza-la que por conter um hash de 32 caracteres, fica muito dificil de alguem que tenha acesso descriptografar o mesmo. No existe funo pronta no php que realize a descripptografia. SHA1 A funo mais usada nesta famlia, a SHA-1, usada numa grande variedade de aplicaes e protocolos de segurana, incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. SHA-1 foi considerado o sucessor do MD5. mais segura que o MD5. ______________________________________________________ Base 64 no java import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.IOException; public class TesteBase64{ public static void main(String args[]){ BASE64Encoder encoder = new BASE64Encoder(); String code = encoder.encodeBuffer("Teste Base64".getBytes()); //Vai imprimir "Teste Base64 -(codificado)- VGVzdGUgQmFzZTY0" .System.out.println("Teste Base64 -(codificado)- " + code); BASE64Decoder decoder = new BASE64Decoder(); .try{ byte[] decoded = decoder.decodeBuffer("VGVzdGUgQmFzZTY0"); //Vai imprimir "VGVzdGUgQmFzZTY0 -(decodificado)- Teste Base64" System.out.println("VGVzdGUgQmFzZTY0 -(decodificado)- " + newString(decoded)); }catch(IOException ex){ } } } Base64 no c# static public string EncodeTo64(string toEncode) { byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(toEncode); string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); return returnValue; } MD5 no Java import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.swing.JOptionPane; public class principal {

//Funo para criar hash da senha informada public static String md5(String senha){ String sen = ""; MessageDigest md = null; try { md = MessageDigest.getInstance("MD5"); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } BigInteger hash = new BigInteger(1, md.digest(senha.getBytes())); sen = hash.toString(16); return sen; } public static void main(String[] args) { String senha = JOptionPane.showInputDialog("Digite uma senha:"); String saida = "Entrada: " + senha + "\nSenha com MD5: " + md5(senha); JOptionPane.showConfirmDialog(null,saida, "Resultado", JOptionPane.CLOSED_OPTION); } } MD5 no C# public static string EncryptMd5(string input) { System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] data = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(input)); System.Text.StringBuilder sbString = new System.Text.StringBuilder(); for (int i = 0; i < data.Length; i++) sbString.Append(data[i].ToString("x2")); return sbString.ToString(); } SHA1 no Java package main; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class HashTextTest { /** * @param args * @throws NoSuchAlgorithmException */

public static void main(String[] args) throws NoSuchAlgorithmException { System.out.println(sha1("test string to sha1")); } static String sha1(String input) throws NoSuchAlgorithmException { MessageDigest mDigest = MessageDigest.getInstance("SHA1"); byte[] result = mDigest.digest(input.getBytes()); StringBuffer sb = new StringBuffer(); for (int i = 0; i < result.length; i++) { sb.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1)); } return sb.toString(); } } SHA1 no C# public string SHA1Hash(string input) { SHA1 sha = new SHA1CryptoServiceProvider(); byte[] data = System.Text.Encoding.ASCII.GetBytes(input); byte[] hash = sha.ComputeHash(data); StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("X2")); } return sb.ToString(); }