来自MD5哈希的干净电子邮件列表

问题描述 投票:0回答:1

我正在尝试从列表“ data.txt”中删除一些邮件,其中其哈希值在另一个列表“ MD5.txt”中

bellow是我制作的脚本(它可以正常工作,但仅适用于小文件)

function Get-MD5{
    Param ([String]$mail)
    $md5 = New-Object -TypeName System.Security.Cryptography.MD5CryptoServiceProvider
    $utf8 = New-Object -TypeName System.Text.UTF8Encoding
    $hash = [System.BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($mail)))
    $hash = $hash.Replace('-','')
    return [String]$hash
    }

    $data = gc $dataPath
    $unsub = gc $MD5Path #ReadCount 5000 -Raw not better    
    foreach($d in $data){
        $t = Get-MD5 "$d"
        if($unsub -like "*$t*"){    
            $data | Where-Object { $_ -notmatch "$d" } | Out-File -FilePath "$dataPath"
        }
    }

我所遇到的问题是MD5文件太大(大于1Gb),因此即使具有16 Gb RAM,该脚本也无法将每行(邮件)与数百万个MD5行进行比较。 (每行30秒)

任何想法,我如何能更快地完成此任务?谢谢

powershell md5
1个回答
0
投票

我可以提供一些技巧,但没有实际的文件和测试,现在可以确定会有多少改进。

  • 避免使用“ |”尽可能降低所有速度]
  • 您可以使用-readcount 0一次读取整个文件,您有足够的内存来处理它
  • 而不是一遍又一遍地写入文件,这将需要您访问磁盘,执行内存操作并立即写出。
  • [就像是一个慢速运算符,请尝试将其替换为match,这大约快十倍]
  • 我还将看一下compare-object,看看是否可以使用diff。例如。 A:整个列表,B:要删除的电子邮件列表,diff是您希望最终输出为(A-B)
© www.soinside.com 2019 - 2024. All rights reserved.