2016-08-30 40 views
0

我已經覆蓋這個命令。如何取代數據庫轉儲中的電子郵件安全?

perl -pe 's/(([A-z0-9_]|-|\+|\.)+)@([A-z0-9_]|\.|-)+\.[A-z0-9]+/"ss.some.email." . ++$n . "\@example.com"/eg' inputfile.sql > outfile.sql 

但它可以打破序列化的數據 - 串支票長度將不匹配,因爲使用的電子郵件將具有不同長度的另一隨機電子郵件所取代。

我想找到一些解決辦法,取代以獨特的電子郵件或至少隨機的人,但具有相同的電子郵件字符串長度

$ cat inputfile.txt 
[email protected] [email protected] 

$ command_replace inputfile.txt 
[email protected] [email protected] 
+0

爲什麼不在轉儲之前清理數據?例如,將數據複製到臨時表中,對電子郵件地址進行散列處理,然後執行轉儲。 – ThisSuitIsBlackNot

+0

這個數據庫轉儲的格式是什麼? – ysth

+0

沒關係。它可以只是簡單的文字。主要目標保存電子郵件的長度。 – Kirby

回答

1

如果您安裝Email::Find到您的perl,你可以做你的轉變像這:

echo "[email protected] [email protected]" | \ 
perl -MEmail::Find -pe 'BEGIN{$junk="abc123"x100; $ef=Email::Find->new(sub { substr($junk,0,length $_[0]-7) . "@aa.com"})}; $ef->find(\$_)' 

希望你的電子郵件沒有超過607個字符長。請注意,unicode或其他非ASCII字符可能需要更多的工作。

+0

感謝您的解決方案。是的,它需要安裝模塊。我的工作筆記本電腦上的管理權限。 – Kirby

+0

不幸的是,我需要在團隊中與默認環境分享一個解決方案。無論如何,這種方法應該在這裏作爲一個選項。謝謝。 – Kirby

+0

@Kirby你不需要管理員權限來安裝模塊。至於共享,Email :: Find是一個純Perl模塊,所以最簡單的事情就是簡單地下載它,並將源代碼包含在腳本中。 – ThisSuitIsBlackNot

-1

最後...

只是有點改變了原來的命令......這是一個有點複雜,但它的工作原理。

它太慢了:對於數據庫轉儲4GB大小的總時間差不多是10個小時。從問題

perl -pe 's/(([A-z0-9_]|-|\+|\.)+)@(([A-z0-9_]|\.|-)+\.[A-z0-9]+)/(join("", map { (q(a)..q(z))[rand(26)] } 1..length($1))) . "@" . (join("", map { (q(a)..q(z))[rand(26)] } 1..length($3)-3)) . ".cc"/eg' path/to/file 

結果將是

[email protected] [email protected] 

,我將非常感激,如果有人能夠優化腳本的性能。