Como definir MessageDigest semente?
-
25-09-2019 - |
Pergunta
O MessageDigest classe implementa o algoritmo SHA-1 (entre muitos outros).O algoritmo SHA-1 permite o uso de diferentes "sementes" ou inicial digere.Ver SHA-1 Psuedocode
O algoritmo inicializa variáveis, ou seja, a semente:
Initialize variables:
h0 = 0x67452301
h1 = 0xEFCDAB89
h2 = 0x98BADCFE
h3 = 0x10325476
h4 = 0xC3D2E1F0
No entanto, a MessageDigest de classe, conforme descrito no On-Line De Java Manual, não fornece nenhuma API para definir esses inicial de variáveis.Na verdade, ele não indicar o valor inicial das variáveis.
Como posso definir a semente inicial para o algoritmo SHA-1?
Onde está um exemplo de SHA-1 em linguagem Java, USANDO UMA SEMENTE INICIAL?
(Eu estou olhando para o SHA-1 execução, a menos que o exemplo usa MessageDigest
uma alternativa semente inicial.)
Solução 2
O Java função não pode ser fornecido com uma semente inicial.
Eu copiei de um C implementação do algoritmo SHA-1 e modificado para permitir a alteração dos valores de propagação inicial.
Outras dicas
Onde você vê a necessidade de uma semente em um SHA-1 digerir?Normalmente no algoritmo de criptografia com uma necessidade de fonte de números aleatórios, uma semente é "necessário".Mas no SHA-1 você não usar números aleatórios, então não é nenhuma semente ou inicial do vetor a para definir.As variáveis que você mencionou são "duros" (constantes), eles são parte do algoritmo, sem a necessidade ou utilizar para alterar os valores de h0-4.
Eu recomendo o uso de um sal em vez de uma semente para MessageDigest família de funções de hash.Um sal é aplicado, por exemplo, adicionar o sal bytes de entrada.
Colocar um sal também é mais poderoso do que diretamente a definição de valores de semente, porque, além de alterar o estado interno do hash, se o sal não é um múltiplo de a digerir o tamanho do bloco, em seguida, ele também pode perturbar o alinhamento com que a entrada é alimentado para a função de hash.