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