对于一个类,我得到了一个由base64编码的salted sha-256散列密码组成的文件。
文件的格式为:
用户名:base64编码sha256密码:salt
我最初的想法是用base64对哈希进行解码,这样我就可以得到:
用户名:salted散列密码:salt
然后通过JTR或hashcat运行它来破解密码。
我的问题是在base64解码过程中。
我的代码看起来像:
public static byte[] decode(String string) {
try {
return new BASE64Decoder().decodeBuffer(string);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void splitLine(String strLine)
throws Exception {
StringTokenizer st = new StringTokenizer(strLine, ":");
if (st.hasMoreTokens())
userName = st.nextToken();
if (st.hasMoreTokens())
password = st.nextToken();
if (st.hasMoreTokens())
salt = st.nextToken();
}
public static void main(String[] argv) {
String line = null;
String pwdFile = null;
int count = 0;
try {
pwdFile = argv[0];
BufferedReader br = new BufferedReader(new FileReader(pwdFile));
line = br.readLine();
while (line != null) {
splitLine(line);
/*备选方案#1:为散列*/system.out.println生成大量不可打印的字符(用户名+“:”+新字符串(解码(密码))+“:”+salt);
/*备选2:给出散列中每个字节的十进制值列表*/system.out.println(username+“:”+arrays.toString(decode(password))+“:”+salt);
count++;
line = br.readLine();
}
br.close();
System.err.println("total lines read: " + count);
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
}
使用备选方案#1,我的输出文件中的行数比输入文件中的行数多50,000行,因此我假设一些解码字符串包含换行符,我也需要修复这些换行符。
如何返回并打印密码的原始哈希值,格式是hashcat或JTR将识别为salted sha256?
问题:您正在尝试使用Base64编码的密码哈希,当它们被解码时,有无法打印的字符
背景:当一个值被散列时,所有的字节都是根据散列算法改变的,并且产生的字节常常超出可打印字符的范围。Base64编码只是一个字母表,将所有字节映射成可打印的字符。
解决方案:使用Base64 decode返回的字节,而不是尝试将它们变成字符串。将这些原始字节转换为十六进制表示形式(Base16),然后再打印它们或将它们提供给Hashcat或JTR。简而言之,你需要做类似下面这样的事情(碰巧用到了Guava库):
String hex = BaseEncoding.base16().encode(bytesFromEncodedString);
这是从我贴出的一个较长的回答中浓缩出来的
我有一个由两个字段“键控”的记录流,然后分配一个间隔为30秒的会话窗口。我使用附加在记录上的“时间戳”作为事件时间。我正在使用“Assign AscendingTimeStamps”水印。 以下面的记录为例。该流由(用户,place)键控。 Record1:user1,place1,timestamp t1 Record2:user2,place1,timestamp在t1之后30秒 桶1 Rec
我试图调试HALF\u甚至i java的舍入问题,正如您在下面看到的,意外的结果是377.35,我们可以预期它会打印377.34? 有人能解释一下这种行为吗?
我有一个用户表和一个高尔夫比赛分数表。当用户参加比赛时,他使用表格在结果表中记录分数。我想显示一个结果表,显示用户的完整列表和比赛的分数。表中有八列分数——每门课一列。我正在努力使用php代码来显示结果分数。如果一名球员已经比赛,他的得分将正确显示,但如果表中的下一名球员没有比赛,则他的得分将显示为表中高于他的球员的得分。这将在列表中继续下去,直到获得真正的分数。我试图找到答案,但没有成功。这是我
问题内容: 我有一个名为“单词”的列表,其中包含字符串。在这里Log.i可以很好地处理“ word”标签,但不会执行“step”语句。似乎如果条件不能很好地工作。尽管“单词”列表包含类似的字符串,但这种方法永远不会进入它。怎么了 请帮助 问题答案: 您需要使用,不。检查两个Object引用是否引用相同的内容Object: 从部分15.21.3引用相等运算符==和=!在的Java语言规范3.0: 虽