Por que o algoritmo MacTripleDes não é produzido no PowerShell estável?

14

Estou verificando os hashes de arquivos usando vários algoritmos diferentes no PowerShell. Quando eu uso o MacTripleDes, sempre obtenho hashes diferentes. Todos os outros, como SHA256 ou MD5, sempre fornecem respostas confiáveis. Você pode replicar o problema no seu próprio computador:

"this is a test" | out-file test.txt
get-filehash test.txt -algorithm sha256
get-filehash test.txt -algorithm sha256
get-filehash test.txt -algorithm mactripledes
get-filehash test.txt -algorithm mactripledes

Eu recebo os mesmos valores de hash para os dois primeiros hashes, mas valores diferentes para os segundos dois hashes. O MacTripleDes deveria ser usado de forma diferente?

Algorithm       Hash                                                                   Path                                                                                                                      
---------       ----                                                                   ----                                                                                                                      
SHA256          3F8CB2CDF03347329CAB0C80A6CE3B01EF3B17AF02E0F6E101FA67CE63729F51       C:\temp\test.txt                                                                                                          
SHA256          3F8CB2CDF03347329CAB0C80A6CE3B01EF3B17AF02E0F6E101FA67CE63729F51       C:\temp\test.txt                                                                                                          
MACTRIPLEDES    904D74A529C7A739                                                       C:\temp\test.txt                                                                                                          
MACTRIPLEDES    AF720778A2C878A2                                                       C:\temp\test.txt   
    
por user6722022 12.12.2016 / 20:58

1 resposta

18

MACTripleDES é diferente dos outros algoritmos oferecidos pelo cmdlet Get-FileHash . Não sei por que ele foi incluído no cmdlet, para ser honesto. Não se encaixa com os outros, IMO.

SHA1, SHA256, MD5, RIPEMD, etc., são todas funções hash regulares. Eles pegam alguns dados de comprimento arbitrário e criam um resumo do comprimento fixo que representa esses dados. O MACTripleDES é diferente, pois não é apenas um algoritmo hash. Tem TripleDES no nome, e 3DES é um algoritmo de criptografia, não um algoritmo de hash. A maior diferença entre funções hash e funções de criptografia é que a criptografia pode ser revertida com uma chave. Hashes são funções unidirecionais.

E MAC significa código de autenticação de mensagem. É um código usado para autenticar uma mensagem. Para verificar se não foi adulterado. Os MACs são projetados para serem efêmeros ou exclusivos de uma mensagem para outra.

Confira o construtor :

 public MACTripleDES() {
        KeyValue = new byte[24]; 
        Utils.StaticRandomNumberGenerator.GetBytes(KeyValue);

        // Create a TripleDES encryptor 
        des = TripleDES.Create();
        HashSizeValue = des.BlockSize; 

        m_bytesPerBlock = des.BlockSize/m_bitsPerByte;
        // By definition, MAC-CBC-3DES takes an IV=0.  C# zero-inits arrays,
        // so all we have to do here is define it. 
        des.IV = new byte[m_bytesPerBlock];
        des.Padding = PaddingMode.Zeros; 
        ...

StaticRandomNumberGenerator gera números aleatórios ... números aleatórios significam que o resultado será diferente a cada execução.

    
por 12.12.2016 / 22:51