Java 如何从特定规范生成可能的密码组合,以便与哈希进行比较

Java 如何从特定规范生成可能的密码组合,以便与哈希进行比较,java,hash,passwords,Java,Hash,Passwords,我试图生成一个字符串列表(可能的密码),然后我可以对其进行散列(SHA-256),以与我已有的现有密码散列进行比较 我知道密码必须是一个流行的男孩或女孩的名字,没有指定大小写,后跟一个从0到9999的数字,例如BoB167、AliCE1000、conNor99、tHe9329 我怎样才能生成密码可以是的可能的密码字符串,这样我就可以对它们进行散列以与散列进行比较 有人知道我可以从哪里开始吗?我想创建一个方法,可以接收所有可能的字符,将每个组合添加到字符串中,但我不确定如何执行此操作。你的问题有点

我试图生成一个字符串列表(可能的密码),然后我可以对其进行散列(SHA-256),以与我已有的现有密码散列进行比较

我知道密码必须是一个流行的男孩或女孩的名字,没有指定大小写,后跟一个从0到9999的数字,例如BoB167、AliCE1000、conNor99、tHe9329

我怎样才能生成密码可以是的可能的密码字符串,这样我就可以对它们进行散列以与散列进行比较


有人知道我可以从哪里开始吗?我想创建一个方法,可以接收所有可能的字符,将每个组合添加到字符串中,但我不确定如何执行此操作。你的问题有点太宽泛了,但是,由于您在评论中指出,您的问题是出现了名称的小写/大写组合,因此我将在我的回答中说明这一部分

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

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

  • 这些整数的位模式可用于确定字符需要大写还是小写。
    例如,对于
    bob
    ,位模式将是000、001、010、011,依此类推
  • 然后,您可以使用一点位移动魔术(借用自)来确定是否将整数中的第n位设置为生成实际的名称组合

示例代码

公共类测试{
公共静态void main(字符串[]args){
组合(“bob”);
}
专用静态无效组合(字符串名称){
char[]chars=name.toCharArray();
for(int i=0;i回报(i&(1)你首先需要一个名字列表作为基础。如果你要开始对所有可能的字符组合进行哈希运算,这将花费永远的时间。即使有一个中等大小的名字列表,你也可能要等待相当长的时间。我有一个20个名字的列表,我正在使用,听起来是可行的。什么阻止了你?我已经为这个名字的小写版本做了这项工作但我不确定如何测试每个字母的大写或小写组合,例如测试bob107、bob107、bob107、bob107等。好的,我会写一些东西。这看起来不错,你知道我如何转换字符[]生成一个字符串列表,每个字符串都是单独的组合?在循环之前创建一个
list list=new ArrayList();
,然后不执行
println
,只需执行
list.add(string.valueOf(result));