【发布时间】:2018-04-30 13:40:37
【问题描述】:
我有一个 CSV 文件(逗号分隔值) 该文件如下所示:
20171108,120909470,SO1244,12,101
20171109,122715740,AG415757,11,101
我需要隐藏(例如)第 3 列中的数据,并且不影响文件中的任何其他条目。
我想使用 SHA1 或 MD5 之类的哈希算法来执行此操作,以便相同的字符串在遇到它们的任何地方都将解析为相同的哈希值。
我需要将数据发送给第三方,并且某些列包含敏感信息(例如客户姓名)。我需要完整的文件,并且在替换字符串的地方,每次遇到它时都需要以相同的方式完成(以便保留任何映射或分组)。它不需要军事加密,只是为了难以逆转。由于我需要间歇性地这样做,因此脚本解决方案将是理想的。
使用命令行工具或脚本实现此目的的最简单方法是什么?
根据偏好,我想要一个 PowerShell 脚本,因为它不需要任何额外的软件来实现...
这个问题似乎与I need to hash (obfuscate) a column of data in a CSV file. Script preferred 重复,但建议的解决方案没有解决我的问题并引发以下错误
You cannot call a method on a null-valued expression.
At C:\Users\mey\Hashr.ps1:4 char:5
+ $_.column3 = $_.column3.gethashcode()
脚本如下
(Import-Csv .\results.csv -delimiter ',' ) | ForEach-Object{
$_.column3 = $_.column3.gethashcode()
$_
} | Export-Csv .\myobfuscated.csv -NoTypeInformation -delimiter ','
更新:
这是我正在运行的程序,由@BaconBits 提出:
param (
[Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 0)]
[String[]]
$String,
[Parameter(Position = 1)]
[ValidateSet('SHA1', 'MD5', 'SHA256', 'SHA384', 'SHA512')]
[String]
$HashName = 'SHA256'
)
process {
$StringBuilder = [System.Text.StringBuilder]::new(128)
[System.Security.Cryptography.HashAlgorithm]::Create($HashName).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String)) | ForEach-Object {
[Void]$StringBuilder.Append($_.ToString("x2"))
}
$StringBuilder.ToString()
}
}
$csv = Import-Csv .\results.csv -delimiter ','
foreach ($line in $csv) {
$line.column1 = Get-StringHash $line.column1
}
$csv | Export-Csv .\myobfuscated.csv -NoTypeInformation -delimiter ','
我正在导入的 csv 文件是我制作的另一个 java 程序的输出,它不创建任何标题,它只是用值填充 csv 文件
我收到此错误 Get-StringHash:无法将参数绑定到参数“String”,因为它为空。
【问题讨论】:
标签: file powershell csv hash