如何根据特定规范生成可能的密码组合以比较哈希值

How to generate possible password combinations from a specific specification to compare hashes with

我正在尝试生成一个字符串列表(可能的密码),然后我可以对其进行哈希处理 (SHA-256) 以与我已有的现有密码哈希值进行比较。

我知道密码必须是流行的男孩或女孩名字,不区分大小写,后跟0到9999之间的数字,例如BoB167、AliCE1000、conNor99、tHe9329

我怎样才能生成可能的密码字符串,这样我就可以对它们进行哈希处理以与我的哈希值进行比较

有谁知道我可以从哪里开始我正在考虑创建一个接受所有可能字符的方法将每个组合添加到一个字符串但我不确定如何做到这一点

您的问题有点过于宽泛,但由于您在评论中指出您的问题与名称的 lowercase/uppercase 组合有关,所以我将在我的回答中解决该部分。

  • 对于具有 n 个字符的给定名称,有 2n 大小写字母的可能组合。
    例如。对于 bob 有 23 = 8 种可能的组合。

  • 从 0 循环到 2n 将产生 2n 个连续整数。
    例如。对于 bob,这将是 0、1、2、3、4、5、6 和 7。

  • 这些整数的位模式可用于确定字符是大写还是小写。
    例如。对于 bob,位模式将为 000、001、010、011 等等。
  • 然后你可以使用一点位移魔法(借用自here)来确定nth 整数中的位被设置为生成实际的名称组合。

示例代码

public class Test {
    public static void main(String[] args) {
        combinations("bob");
    }

    private static void combinations(String name) {
        char[] chars  = name.toCharArray();

        for (int i = 0; i < Math.pow(2, chars.length); i++) {
            char[] result = new char[chars.length];

            for (int n = 0; n < chars.length; n++) {
                result[n] = isBitSet(i, n) ? Character.toUpperCase(chars[n])
                                           : Character.toLowerCase(chars[n]);
            }

            System.out.println(result);
        }
    }

    private static boolean isBitSet(int i, int n) {
        return ((i & (1 << n)) != 0);
    }
}

输出

这会产生以下输出:

bob
Bob
bOb
BOb
boB
BoB
bOB
BOB