2013-03-01 34 views
2

我有一個帶標題行的管道分隔文本文件。 (我說的CSV中的問題,使之更加AA位立即理解......我想大多數的解決方案將適用於這兩種格式。)我需要在CSV文件中散列(混淆)一列數據。腳本首選

文件看起來是這樣的:

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

我需要掩蓋(例如)第3列和第9列中的數據,而不會影響文件中的任何其他條目。

我想用SHA1或MD5這樣的哈希算法來做到這一點,這樣相同的字符串會在遇到它們的任何地方轉移到相同的哈希值。

編輯 - 爲什麼我要做到這一點
我需要一些數據發送給第三方,並且某些列包含敏感信息(如用戶名)。我需要這個文件是完整的,並且在一個字符串被替換的地方,我需要在每次遇到它的時候以相同的方式完成它(以便保留任何映射或分組)。它不需要軍事加密,只是很難扭轉。正如我需要間歇性地,腳本解決方案將是理想的。
/EDIT

什麼是實現這一使用命令行工具或腳本的最簡單的方法?

通過喜好,我想一個批處理腳本或PowerShell腳本,因爲不需要任何額外的軟件來實現......

+0

爲什麼需要哈希字符串,如果我們能夠概述你正在努力完成的任務,將更容易提供一個適合你的解決方案。 – 2013-03-01 14:58:13

+0

感謝您的反饋。我編輯了我的問題以包含更多關於什麼和爲什麼的細節。 – freshr 2013-03-01 15:07:29

回答

1

嘗試

(Import-Csv .\my.csv -delimiter '|') | ForEach-Object{  
    $_.column3 = $_.column3.gethashcode() 
    $_.column4 = $_.column4.gethashcode() 
    $_  
} | Export-Csv .\myobfuscated.csv -NoTypeInformation -delimiter '|' 
+0

謝謝。這很棒。我知道必須有一個很好的方法來實現它! – freshr 2013-03-01 16:00:50

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