Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Detalhes do código de hash

Bom dia a todos

Eu tenho uma dúvida em relação à uma atividade extra, que eu queria enteder a parte final desse código de criptografia de senha:

fun String.toHash(
    algoritmo: String = "SHA-256"
): String {
    return MessageDigest
        .getInstance(algoritmo)
        .digest(this.toByteArray())
        .fold("") { str, byte ->
            str + "%02x".format(byte)
        }
}
  • Eu não exatamente o significado de todo o código do fold. A string vazia "" é o valor inicial recebido recebido das outras funções ou um valor inicial para colocarmos, mas deixamos vazia neste caso
  • O str representa a senha que passamos?
  • O %02x serve como um valor aleatório para misturarmos com a senha e dificultar a descriptografia?
  • e o format(byte) é para transformarmos essa string em byte?

Eu to meio confuso e queria entender melhor esse final do método

2 respostas
solução!

Olá Murilo, tudo bem?

O método toHash que você postou é responsável por gerar um hash da senha que foi passada como parâmetro. O hash é uma sequência de caracteres que representa a senha de forma criptografada, ou seja, não é possível recuperar a senha original a partir do hash.

Agora, vamos entender o que acontece dentro do método toHash. O fold é uma função de alta ordem que recebe uma lista e um valor inicial, e aplica uma operação em cada elemento da lista, acumulando o resultado em um valor final. No caso desse método, a lista é o resultado da função digest, que retorna um array de bytes que representa o hash da senha.

A string vazia "" é o valor inicial que será acumulado no fold. O str representa o valor acumulado até o momento, que começa com a string vazia. O byte representa cada elemento do array de bytes que foi retornado pela função digest.

O %02x é uma formatação que converte o valor do byte em uma string hexadecimal com dois dígitos. O 02 indica que a string deve ter pelo menos dois dígitos, adicionando um zero à esquerda se necessário. O x indica que a conversão deve ser feita para hexadecimal.

Portanto, o fold está convertendo cada byte do array em uma string hexadecimal com dois dígitos, e concatenando essas strings para formar o hash final da senha.

Espero ter ajudado a esclarecer suas dúvidas! Se tiver mais alguma pergunta, é só falar.

Bons estudos!

Agora ficou mais claro, muito obrigado