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
最初の2つのハッシュのハッシュ値は同じですが、2番目の2つのハッシュの値は異なります。 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
コマンドレットによって提供される他のアルゴリズムとは異なります。正直なところ、それがコマンドレットに含まれていた理由がわかりません。他の人には合いません、IMO。
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は乱数を生成します...乱数は、実行ごとに結果が異なることを意味します。