我想根据该列的关键性掩盖几列,这样一旦我将这些文件提供给我的团队,他们就应该看到屏蔽或加密的值用于开发目的。
我有一个包含7列的文件(excel,csv,tsv或其他),列可以根据文件增加或减少。
name,creditcard,lastname,personal_data,address,city,state
ajay,1234567899999993,jat,1234,pune,pimpri,maharashtra
naresh,9876543210547863,mantri,2674,pune,timpri,maharashtra
sanjay,2452352352525523,hatra,3224,pune,wakad,maharashtra
sarabjit,12235667889768,rango,3114,pune,timpri,maharashtra
我需要根据它所具有的字母数掩盖一些列数据。 比方说,我想屏蔽信用卡号码,personal_data。屏蔽后,输出文件应包含与输入文件相同的列数。 但是2或3或者任何列都被屏蔽了,它应该包含相同的no。字符串,但可能是不同的格式(信用卡号是16位数,所以它应该包含精确的16,但可以在输出文件中包含字母数字。
请求您提供Java代码或一些例程或逻辑来构建这种复杂的情况。
我需要将这些倍数文件提供给我的成员,这样他们就无法看到被屏蔽的重要信息,但仍然可以在这些列上进行进一步的开发。
答案 0 :(得分:0)
听起来您想要读取并解析输入文件的每一行,混淆某些特定字段的内容,然后将该行写入输出文件。
要隐藏某些特定字段,您可以对字段进行散列并使用生成的哈希码的base-64编码替换它们,并将其截断为与原始字段数据相同的长度。
但是,如果您只想隐藏某些字段,那么用随机生成的字符替换它们就足够了。
听起来唯一的技巧就是知道哪些字段会模糊不清。
<强>附录强>
这是一种生成与源字符串长度相同的随机字符串的方法:
import java.util.*;
public class RandomGenerator
{
static private long s_seed = 123;
static private Random s_rnd = new Random(s_seed);
public static String genRandomString(String src)
{
char[] dst = new char[src.length()];
for (int i = 0; i < dst.length; i++)
{
char ch = src.charAt(i);
if (Character.isDigit(ch))
ch = (char) (s_rnd.nextInt(10) + '0'); // Random char [0-9]
else if (Character.isAlphabetic(ch))
ch = (char) (s_rnd.nextInt(26) + 'A'); // Random char [A-Z]
else
ch = '?';
dst[i] = ch;
}
return new String(dst);
}
}
测试计划见:Ideone。