Post

John The Reaper error solved

John The reaper python2 error solved

John The Reaper error solved

Introduction

When using tools like ssh2john, which is part of the John the Ripper utility suite, you might run into an error like this:

1
2
3
4
5
6
File "/usr/bin/ssh2john", line 194, in <module>
  read_private_key(filename)
File "/usr/bin/ssh2john", line 154, in read_private_key
  saltstr = data[salt_offset:salt_offset+salt_length].encode("hex")
AttributeError: 'bytes' object has no attribute 'encode'. Did you mean: 'decode'?

This error happens because the script was originally written for Python 2, where you could do:

1
some_bytes.encode("hex")

However, in Python 3—the standard nowadays—that method is no longer valid. Instead, you should use:

1
2
some_bytes.hex()

Or if you’re working with encoded strings:

1
some_bytes.decode('utf-8')

But since the script hasn’t been updated, and you’re using an old version of John the Ripper installed via your package manager (pacman -S john or apt install john), it throws this Python error.

The Quick Fix

This problem is easily solved by installing the up-to-date GitHub version of John the Ripper. It’s Python 3 compatible and works smoothly.

On Arch Linux:

1
sudo pacman -S john-git

Or if you’re using yay:

1
yay -S john-git

On Debian/Ubuntu (if john-git is available):

1
sudo apt install john-git

If it’s not available, just clone and compile it manually:

1
2
3
git clone https://github.com/openwall/john.git
cd john/src
./configure && make -s clean && make -sj4
This post is licensed under CC BY 4.0 by the author.