隐藏数据

时间:2016-08-12 14:44:34

标签: java

我想根据该列的关键性掩盖几列,这样一旦我将这些文件提供给我的团队,他们就应该看到屏蔽或加密的值用于开发目的。

我有一个包含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代码或一些例程或逻辑来构建这种复杂的情况。

我需要将这些倍数文件提供给我的成员,这样他们就无法看到被屏蔽的重要信息,但仍然可以在这些列上进行进一步的开发。

1 个答案:

答案 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