为什么PowerShell中的MacTripleDes算法输出不稳定?

我在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 cmdlet提供的其他算法不同.我不确定为什么它包含在cmdlet中,说实话.它不适合其他人,IMO.

SHA1,SHA256,MD5,RIPEMD等,都是常规散列函数.它们获取一些任意长度的数据,并创建一个表示该数据的固定长度的摘要. MACTripleDES虽然不同,但它不仅仅是一种哈希算法.它的名称中包含TripleDES,3DES是加密算法,而不是哈希算法.散列函数和加密函数之间的最大区别在于可以使用密钥反转加密.哈希是单向函数.

而MAC代表消息认证码.它是用于验证消息的代码.验证它没有被篡改. MAC从一个消息到下一个消息被设计为短暂的或唯一的.

查看the constructor

 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生成随机数…随机数表示每次运行结果都不同.

翻译自:https://serverfault.com/questions/820300/why-isnt-mactripledes-algorithm-output-in-powershell-stable

转载注明原文:为什么PowerShell中的MacTripleDes算法输出不稳定?