我正在尝试生成一个字符串列表(可能的密码),然后可以对其进行哈希处理(SHA-256)以与我已经拥有的密码哈希进行比较。
我知道密码必须是一个受欢迎的男孩或女孩名字,没有指定大小写,后跟一个介于0到9999之间的数字,例如BoB167,AliCE1000,conNor99,tHe9329
如何生成可能的密码字符串,以便我可以对其进行哈希处理以与哈希进行比较
有人知道我可以从哪里开始吗?我在想创建一个可以吸收所有可能字符的方法,将每个组合添加到字符串中,但不确定如何做到这一点
答案 0 :(得分:0)
您的问题有点太宽泛了,但是由于您在评论中指出您的问题是由名称的小写/大写字母组合而成的,因此我将在回答中解决这一部分。
对于具有 n 个字符的给定名称,存在 2 n 个可能的大小写字母组合。
例如。对于bob
,有2 3 = 8种可能的组合。
从0循环到 2 n 将产生 2 n 个连续整数。
例如。对于bob
,它将是0、1、2、3、4、5、6和7。
bob
,位模式将为000、001、010、011,依此类推。示例代码
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