Назад | Перейти на главную страницу

Почему вывод алгоритма MacTripleDes в PowerShell нестабилен?

Я проверяю хэши файлов, используя несколько разных алгоритмов в PowerShell. Когда я использую MacTripleDes, я всегда получаю разные хеши. Все остальные, такие как SHA256 или MD5, всегда дают надежные ответы. Вы можете воспроизвести проблему на своем компьютере:

"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

Я получаю одинаковые значения хешей для первых двух хешей, но разные значения для вторых двух хешей. Можно ли использовать MacTripleDes по-другому?

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   

MACTripleDES отличается от других алгоритмов, предлагаемых Get-FileHash командлет. Честно говоря, я не уверен, почему он был включен в командлет. Это не сочетается с другими, ИМО.

SHA1, SHA256, MD5, RIPEMD и т. Д. - все это обычные хэш-функции. Они берут данные произвольной длины и создают дайджест фиксированной длины, который представляет эти данные. MACTripleDES отличается тем, что это не просто алгоритм хеширования. В его названии есть TripleDES, а 3DES - это алгоритм шифрования, а не алгоритм хеширования. Самая большая разница между хэш-функциями и функциями шифрования заключается в том, что шифрование можно отменить с помощью ключа. Хэши - это односторонние функции.

А MAC означает код аутентификации сообщения. Это код, который используется для аутентификации сообщения. Чтобы убедиться, что он не был подделан. MAC-адреса предназначены для того, чтобы быть эфемерными или уникальными от одного сообщения к другому.

Проверять, выписываться конструктор:

 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 генерирует случайные числа ... случайные числа означают, что результат будет отличаться при каждом запуске.