You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JSON中生成的蜜罐密码为长数字?求转换及验证方法

解决JSON中出现超长数字串且蜜罐词不显示的问题

看起来你遇到的问题是:生成的随机字母蜜罐词没有正确出现在JSON文件中,反而看到一堆超长数字串,而且不确定蜜罐词是否生成成功。我来帮你分析一下原因并给出解决方案:

问题根源分析

  • 现有JSON文件的遗留内容:你展示的JSON里的超长数字串是原来honeyWord.json文件里就有的内容,不是你当前代码生成的。你的代码逻辑是读取现有JSON的内容,然后把蜜罐词作为顶级键添加到Map中,再写回文件,所以这些原有内容不会被覆盖,依然会保留在JSON里。
  • 代码逻辑与预期不符:从代码看,你把生成的蜜罐词作为Map的key,值设为空字符串。但如果你的预期是把蜜罐词作为某个字段的值(比如password字段下的数组或列表),那当前代码的逻辑就错了,导致你找不到生成的蜜罐词。
  • 蜜罐词生成逻辑是正常的:你的随机字母串生成逻辑没问题,honeyWordSet里应该已经有100个符合要求的蜜罐词了,只是因为你把它们作为顶级键添加到现有Map,而现有JSON里的password和index字段太显眼,你没注意到这些新增的键。

解决方案

方案1:替换原有JSON内容,只存储蜜罐词

如果你想完全替换原有JSON的内容,只保存生成的蜜罐词,可以修改代码如下:

public static String characters[] = {"a","s","d","f","g","h","j","k","l","q","w","e","r","t","y","u","i","o","p","z","x","c","v","b","n","m"};
static Set<String> honeyWordSet = new HashSet<String>();

public static void generateHoneywords() {
    Random rn = new Random();
    while(honeyWordSet.size() < 101) {
        StringBuffer word = new StringBuffer();
        int numOfChar;
        do {
            numOfChar = rn.nextInt(10);
        } while(numOfChar < 1);
        for(int j=0; j<numOfChar; j++) {
            word.append(characters[rn.nextInt(characters.length)]);
        }
        honeyWordSet.add(word.toString());
    }

    try {
        ObjectMapper mapper = new ObjectMapper();
        // 创建新的Map,不读取原有文件内容
        Map<String, Object> map = new HashMap<>();
        // 将蜜罐词以数组形式存入指定字段
        map.put("honeywords", new ArrayList<>(honeyWordSet));
        mapper.writeValue(new File("jsonFiles\\honeyWord.json"), map);
        System.out.println("蜜罐词生成并写入成功!");
    } catch(Exception e) {
        e.printStackTrace();
    }
}

方案2:保留原有JSON内容,追加蜜罐词

如果你需要保留原有JSON里的password和index字段,同时把蜜罐词添加到新字段下:

public static String characters[] = {"a","s","d","f","g","h","j","k","l","q","w","e","r","t","y","u","i","o","p","z","x","c","v","b","n","m"};
static Set<String> honeyWordSet = new HashSet<String>();

public static void generateHoneywords() {
    Random rn = new Random();
    while(honeyWordSet.size() < 101) {
        StringBuffer word = new StringBuffer();
        int numOfChar;
        do {
            numOfChar = rn.nextInt(10);
        } while(numOfChar < 1);
        for(int j=0; j<numOfChar; j++) {
            word.append(characters[rn.nextInt(characters.length)]);
        }
        honeyWordSet.add(word.toString());
    }

    try {
        ObjectMapper mapper = new ObjectMapper();
        File jsonFile = new File("jsonFiles\\honeyWord.json");
        Map<String, Object> map;
        
        // 文件不存在则创建新Map,否则读取现有内容
        if (!jsonFile.exists()) {
            map = new HashMap<>();
        } else {
            map = mapper.readValue(jsonFile, new TypeReference<Map<String, Object>>() {});
        }
        
        // 将蜜罐词添加到新字段中
        map.put("honeywords", new ArrayList<>(honeyWordSet));
        
        mapper.writeValue(jsonFile, map);
        System.out.println("蜜罐词生成并追加到JSON成功!");
    } catch(Exception e) {
        e.printStackTrace();
    }
}

清除原有超长数字串

如果你想删除原有JSON里的超长数字串(即password字段),可以在读取Map后添加一行:

map.remove("password");

验证蜜罐词生成状态

你可以在生成完honeyWordSet后,添加一段代码打印部分蜜罐词,确认生成是否正常:

// 打印前10个蜜罐词验证
System.out.println("生成的蜜罐词示例:");
int count = 0;
for(String word : honeyWordSet) {
    System.out.println(word);
    if(++count == 10) break;
}

内容的提问来源于stack exchange,提问作者nuradilla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:42:30