gpt4 book ai didi

powershell - 如何检查一个文件是否*大部分*与另一个相同?

转载 作者:行者123 更新时间:2023-12-02 23:34:16 24 4
gpt4 key购买 nike

我需要使用 Powershell 来检查两个文件是否相同,但有以下限制:前 2K 中有八个特定字节允许不同(如果您感兴趣,它是 super 块中的某些时间戳字节) ext4 图像)。

我在 Stack Overflow(显然)上找到的用于进行全面检查的代码如下:

$md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
$hash = [System.BitConverter]::ToString(
$md5.ComputeHash([System.IO.File]::ReadAllBytes("fspec.bin")))

这给了我整个文件的哈希值,但我真正需要的是:
  • 文件的前 2K 作为字节数组,以便我可以检查细节;和
  • 用于检查相等性的文件其余部分的校验和。
  • System.IO.File类(class)有 ReadAllBytes但似乎无法读取文件的某个部分,也无法查找特定位置。

    我试图读入字节数组并使用数组切片来获取如下部分:
    $restOfFile = [System.IO.File]::ReadAllBytes("fspec")
    $firstTwoK = $restOfFile[0..2048]
    $restOfFile = $restOfFile[2048..$restOfFile.Length]
    # Then:
    # 1. Check bytes in firstTwoK.
    # 2. Check MD5 of all bytes in restOfFile.

    不幸的是,它是一个 750M 文件的事实导致了问题:
    Array dimensions exceeded supported range.
    At C:\testprog\testprog.ps1:42 char:1
    + ${devBytes} = ${devBytes}[2048..${devBytes}.Length]
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : OperationStopped: (:) [], OutOfMemoryException
    + FullyQualifiedErrorId : System.OutOfMemoryException

    有没有一种功能性的方式来做我需要的事情?

    最佳答案

    使用 System.Security.Cryptography.HashAlgorithm 的派生类型之一并使用其 ComputeHash指定偏移量的方法。检查文件唯一性,MD5 is still fine to use ,尽管您也可以选择使用更强的算法:

    $fileBytes = [System.File.IO]::ReadAllBytes("C:\path\to\file.ext")
    $md5Cng = [System.Security.Cryptography.MD5Cng]::Create()
    $fileHashAfterOffset = $md5Cng.ComputeHash( $fileBytes, 2KB, $fileBytes.length - 2KB )
    ComputeHash的第一个参数是文件为 Byte[] .第二个参数是偏移量(例如,生成哈希时不包括第一个 x 个字节),第三个参数是您要评估的字节数。在这种情况下,我们需要文件的其余部分,因此我们取 $fileBytes 中的总字节数数组并从中减去偏移量。

    使用 2KB是获取以 2 KB 为单位的字节数的简写。

    关于powershell - 如何检查一个文件是否*大部分*与另一个相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59726362/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com