Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Hashpic creates an image from the MD5 hash of your input.
Since v0.2.0 it is also possible to create an image from a SHA-512 hash.
Since v0.4.8 it is also possible to create an image from a SHAKE-256 hash with variable digest length of 4, 9, 16, 25, 36, 64, 100, 144, 225 or 255.
Since v0.3.5 it is also possible to create an image from a SHA3-512 and a BLAKE2b hash.
Since v0.4.0 it is possible to create an image as SVG.
v0.6.0 brought a huge performance boost.
pip3 install hashpic
python3 -m hashpic 'Hashpic rocks!'
This should create a file output.png
in your current directory.
The input Hashpic rocks!
should create the following image:
All this commands should produce the same image as above.
printf 'Hashpic rocks!' | md5 | python3 -m hashpic --bypass
printf 'Hashpic rocks!' | python3 -m hashpic
Since v0.4.0 it is possible to create an image as SVG. The following command will create a file output.svg
in your current directory.
python3 -m hashpic 'Hashpic rocks!' --svg
Since v0.5.0 it is possible to create circles instead of squares. But this is limited to the SVG Mode
.
python3 -m hashpic 'Hashpic rocks!' --svg --round
Since v0.7.0 it is possible to create hexagons instead of squares. But this is limited to the SVG Mode
.
If you pass also the --round
flag when using --hexagon
, --round
will be ignored.
python3 -m hashpic 'Hashpic rocks!' --svg --hexagon
Since v0.5.2 it is possible to add a background color to the SVG.
python3 -m hashpic 'Hashpic rocks!' --svg --round --background '#000000'
It is also possible to create an image from a hash of a file. Use the --file
argument for that.
python3 -m hashpic --file README.md
It is also possible to create an image from a SHA-512 hash. All arguments for MD5 Mode are also available for SHA512 Mode.
python3 -m hashpic --sha512 'Hashpic rocks!'
printf 'Hashpic rocks!' | python3 -m hashpic --sha512
This commands should create the following image:
You can create an image from a SHAKE256 hash with variable digest lengths. Valid lengths are 4, 9, 16, 25, 36, 64, 100, 144, 225 and 255. You must specify the length of the digest if you want to create an image from a SHAKE256 hash.
python3 -m hashpic --shake256 --length 100 'Hashpic rocks!'
The command above should produce the following image:
python3 -m hashpic --shake256 --length 4 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 9 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 16 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 25 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 36 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 64 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 100 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 144 'Hashpic rocks!'
python3 -m hashpic --shake256 --length 225 'Hashpic rocks!'
It adds a padding byte of 0xff
to the end of the hash to fit it into a 16x16 grid
. Please keep this in mind.
python3 -m hashpic --shake256 --length 255 'Hashpic rocks!'
It is possible to create an image from a SHA3 hash.
python3 -m hashpic 'Hashpic rocks!' --sha3
It is possible to create an image from a BLAKE2b hash.
python3 -m hashpic 'Hashpic rocks!' --blake2b
Since v0.4.4 there is a dockerized version available on ghcr.io
. You can pull the image from there and use it e.g.:
docker run -it -v "$(pwd)":/app --rm ghcr.io/0xflotus/hashpic:0.6.2 deadbeef --bypass --shake256 --length 4
You can also pipe to docker:
printf 'ff0030ffe589b7a4e1320f12c4c8de73' | docker run -i --rm ghcr.io/0xflotus/hashpic:0.6.2 -c --shake256 --length 16 --bypass
Bypassing a hash directly:
python3 -m hashpic ff00ff00ff00ff0000ff00ff00ff00ffff00ff00ff00ff0000ff00ff00ff00ffff00ff00ff00ff0000ff00ff00ff00ffff00ff00ff00ff0000ff00ff00ff00ff --bypass --sha512
This command will produce the following image:
So we can call the hash above the so called chessboard hash
.
You can also bypass a hash from another program:
printf 'Hashpic rocks!' | sha512sum | awk '{print $1}' | python3 -m hashpic --sha512 -c --bypass
With all this in mind you can also use hashpic to create an image not only from a hash but e.g. from the current time in hex:
python3 -c "import time; print(hex(int(time.time()))[2:])" | python3 -m hashpic --shake256 --length 4 --bypass
Or e.g. an IP address in hexadecimal form:
# localhost hex(127.0.0.1) == 7f000001
python3 -m hashpic 7f000001 --shake256 --length 4 --bypass
# e.g. an IPv6 address of Googles DNS server
printf 2001:4860:4860:0000:0000:0000:0000:8844 | tr -d ':' | python3 -m hashpic --bypass
If you have installed h3
you can transform a geo coordinate to an image.
The example below uses the geo coordinates of the Eiffel Tower in Paris, France
.
python3 -c "import h3; print(h3.geo_to_h3(48.8583230030819, 2.294450300083837, 15).zfill(18))" | python3 -m hashpic --bypass --shake256 --length 9
It is also possible to create an image from an uuid
.
python3 -c "import uuid; print(str(uuid.uuid4()).replace('-', ''))" | python3 -m hashpic --bypass -c
You can also create an image from any 64-bit integer.
printf 8724325378325383578 | python3 -c "import sys, textwrap; print(''.join([hex(int(bit))[2:].zfill(2) for bit in textwrap.fill(bin(int(sys.stdin.read()))[2:].zfill(64), 1).split('\n')]))" | python3 -m hashpic --bypass --svg --round --sha3
# compute the bypassed number
python3 -c "print(2**56-1)" | python3 -c "import sys, textwrap; print(''.join([hex(int(bit))[2:].zfill(2) for bit in textwrap.fill(bin(int(sys.stdin.read()))[2:].zfill(64),1).split('\n')]))" | python3 -m hashpic --bypass --svg --round --sha3
# bypass the binary directly
printf 0110100111001100001101001110011000111110011100110000111100111011 | python3 -c "import sys, textwrap; print(''.join([hex(int(bit))[2:].zfill(2) for bit in textwrap.fill(bin(int(sys.stdin.read(), 2))[2:].zfill(64),1).split('\n')]))" | python3 -m hashpic --bypass --svg --round --sha3
# map the colors
printf 0110100111001100001101001110011000111110011100110000111100111011 | python3 -c "import sys, textwrap; print(''.join(map(lambda x: '00' if x == '01' else 'ff', [hex(int(bit))[2:].zfill(2) for bit in textwrap.fill(bin(int(sys.stdin.read(), 2))[2:].zfill(64),1).split('\n')])))" | python3 -m hashpic --bypass --svg --round --sha3
The color palette in data.py
was influenced by the string-color
library.
Thanks for this!
FAQs
Create an image from a MD5, SHA512, SHA3-512, Blake2b or SHAKE256 hash
We found that hashpic demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.