2

我有一个带有标题行的管道分隔文本文件。(我在问题中说 CSV 是为了让它更容易理解......我想大多数解决方案都适用于任何一种格式。)

该文件如下所示:

COLUMN1|COLUMN2|COLUMN3|COLUMN4|...|
Field1|Field2|Field3|Field4|...|
...

我需要隐藏(例如)第 3 列和第 9 列中的数据,而不影响文件中的任何其他条目。

我想使用 SHA1 或 MD5 之类的散列算法来执行此操作,以便相同的字符串在遇到它们的任何地方都将解析为相同的散列值。

编辑 - 为什么我要这样做
我需要将一些数据发送给第三方,并且某些列包含敏感信息(例如客户姓名)。我需要完整的文件,并且在替换字符串的地方,我需要在每次遇到它时都以相同的方式完成(以便保留任何映射或分组)。它不需要军事加密,只是为了难以逆转。由于我需要间歇性地这样做,因此脚本化的解决方案将是理想的。
/编辑

使用命令行工具或脚本实现此目的的最简单方法是什么?

根据偏好,我想要一个批处理脚本或 PowerShell 脚本,因为它不需要任何额外的软件来实现......

4

2 回答 2

1

尝试

(Import-Csv .\my.csv -delimiter '|' ) | ForEach-Object{     
    $_.column3 = $_.column3.gethashcode()
    $_.column4 = $_.column4.gethashcode()
    $_    
} | Export-Csv .\myobfuscated.csv -NoTypeInformation -delimiter '|'
于 2013-03-01T15:16:39.723 回答
0
$md5 = new-object -TypeName Security.Cryptography.MD5CryptoServiceProvider
$utf8 = new-object -TypeName Text.UTF8Encoding

import-csv original.csv -delimiter '|' |
foreach {   
    $_.Column3 = [BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($_.Column3)))
    $_.Column9 = [BitConverter]::ToString($md5.ComputeHash($utf8.GetBytes($_.Column9)))
    $_
} |
export-csv encrypted.csv -delimiter '|' -noTypeInformation
于 2013-03-01T15:16:47.250 回答