Exercicios de Concurso Segurança da Informação
Por: vitor-z • 20/8/2016 • Trabalho acadêmico • 2.484 Palavras (10 Páginas) • 355 Visualizações
MD5
O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, usado por softwares com protocolo ponto-a-ponto (P2P), verificação de integridade e logins. Por ser um algoritmo unidirecional, um hash MD5 não pode ser transformado novamente na password (ou texto) que lhe deu origem. O MD5 também é usado para verificar a integridade de um ficheiro através, por exemplo, do programa md5sum, que cria a hash de um ficheiro. Isto pode-se tornar muito útil para downloads de ficheiros grandes, para programas P2P que constroem o ficheiro através de pedaços e estão sujeitos à corrupção de ficheiros. O MD5 é de domínio público para uso em geral, a partir de uma mensagem de um tamanho qualquer, ele gera um valor hash de 128 bits; com este algoritmo, é computacionalmente impraticável descobrir duas mensagens que gerem o mesmo valor, bem como reproduzir uma mensagem a partir do seu digest. O algoritmo MD5 é utilizado como mecanismo de integridade em vários protocolos de padrão Internet (RFC1352, RFC1446, etc.), bem como pelo CERT e CIAC. Message Digests são funções hash que geram código de tamanho fixo, em uma única direção, a partir de dados de tamanho arbitrário. Esses códigos hash são extremamente úteis para segurança de senhas. Como ele não pode ser descriptografado, o código hash precisa ser regenerado e comparado com a sequência disponível anteriormente. Se ambos se igualarem, o acesso é liberado. A API Java implementa dois algoritmos de Message Digest: o MD5 e o SHA-1.
Código: Abaixo podemos observar um código MD5:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Criptografia {
//método para geração do algoritmo
private static MessageDigest md = null;
static {
try {
md = MessageDigest.getInstance("MD5");
/*
Após a chamada a getInstance(), você possui uma referência a um objeto pronto para criptografar seus dados utilizando o algoritmo especificado. Neste caso o MD5.
*/
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
}
//criando um método estático para gerar a chave criptografada
private static char[] hexCodes(byte[] text) {
char[] hexOutput = new char[text.length * 2];
String hexString;
for (int i = 0; i < text.length; i++) {
hexString = "00" + Integer.toHexString(text[i]);
hexString.toUpperCase().getChars(hexString.length() - 2,
hexString.length(), hexOutput, i * 2);
}
return hexOutput;
}
//criando um método público que receberá o texto a ser criptografado
public static String criptografar(String pwd) {
if (md != null) {
return new String(hexCodes(md.digest(pwd.getBytes())));
}
return null;
}
}
//fazendo chamadas a esta classe
public static void main(String[] args){
String senha = " senhadeteste ";
System.out.println(Criptografia.criptografar(senha));
}
SHA-1
O Secure Hash Algorithm tem como função um espalhamento unidirecional que gera um valor hash de 160 bits com base no tamanho eventual da mensagem, resultando em uma string com o tamanho de 40 caracteres. Seu funcionamento é quase semelhante ao MD5, visto que o SHA-1 foi criado com base nele. SHA-1 faz parte de várias aplicações e protocolos de segurança, tais como TLS, SSL, PGP, S/MIME e IPsec. Ele também é utilizado em sistemas de controle distribuídos com a tarefa de identificar revisões e detectar corrupção de dados.
Abaixo mostra o método que usará SHA-1 para criar um hash e, logo em seguida, devolver ele criptografado. O método GetSHA1HashData serve para inserir um string diretamente.
Hash usando SHA-1
private string GetSHA1HashData(string data)
{
SHA1 sha1 = SHA1.Create();
byte[] hashData = sha1.ComputeHash(Encoding.Default.GetBytes(data));
StringBuilder returnValue = new StringBuilder();
for (int i = 0; i < hashData.Length; i++) {
returnValue.Append(hashData[i].ToString());}
return returnValue.ToString();
}
Comentário: vai receber uma string e assim criar um hash.
Método para validar
private bool ValidateSHA1HashData(string inputData, string storedHashData){
string getHashInputData = GetSHA1HashData(inputData);
if (string.Compare(getHashInputData, storedHashData) == 0){
return true;
}
else
...