Image Cryptography Based on Rubix's Cube Principle
Project description
Image Cryptography Based on Rubix's Cube Principle
Implementation of image encryption and decryption using Rubix's Cube Principle. This algorithm is based on the paper "A Secure Image Encryption Algorithm Based on Rubik's Cube Principle" by Khaled Loukhaoukha, Jean-Yves Chouinard and Abdellah Berdai.
Algorithm Overview
Given an input image having the three R,G,B matrices of size M X N
Hyperparameters include
α
- used for vector creation
ITER_MAX
- maximum number of times to carry out operations
A. Encyption
-
Create two vectors
Kr
andKc
with|Kr|=M
&|Kc|=N
. The values of these vectors are randomly picked from 0 to 2α -1 -
Repeat below steps
ITER_MAX
number of timesi. Rolling Rows:
-
The sum of all pixel values of every row of the image RGB matrices are calculated one by one.
-
If the sum of a given row
rowNumber
is even, Roll the row to the rightKr[rowNumber]
times Otherwise roll to the leftKr[rowNumber]
times.
ii. Rolling Columns:
-
The sum of all pixel values of every column of the image RGB matrices are calculated one by one.
-
If the sum of a given row
columnNumber
is even, roll the column upKc[columnNumber]
times. Otherwise roll the column downKc[columnNumber]
times.
iii. XORing Pixels:
-
For every pixel(i,j), XOR the pixel with the below two values
-
Value #1 -
Kc[columnNumber]
ifi
is odd else 180 rotated bit version ofKc[columnNumber]
-
Value #2 -
Kr[rowNumber]
ifj
is even else 180 rotated bit version ofKr[rowNumber]
-
-
B. Decryption
Given an encrypted image, vectors Kr
and Kc
& ITER_MAX
, decryption can be done by following the reverse procedure - XORing pixels → Rolling Columns → Rolling Rows ITER_MAX
number of times
Prerequisites
-
Python3 ( https://www.python.org/downloads/ )
-
Python3 package dependencies - Run
pip3 install -r requirements.txt
Running
- Using the crypto_client.py script supplying neccessary parameters
$ python3 crypto_client.py -h
usage: crypto_client.py [-h] [--type TYPE] [--image IMAGE]
[--alpha ALPHA] [--iter_max ITER_MAX]
[--key KEY] [--output_image OUTPUT_IMAGE]
- Using rubikencryptor python package
from rubikencryptor.rubikencryptor import RubikCubeCrypto
from PIL import Image
# Encrypt image
input_image = Image.open('image1.png')
encryptor = RubikCubeCrypto(input_image)
encrypted_image = encryptor.encrypt(alpha=8, iter_max=10, key_filename='key.txt')
encrypted_image.save('encrypted_image.png')
# Decrypt image
decryptor = RubikCubeCrypto(encrypted_image)
decrypted_image = decryptor.decrypt(key_filename='key.txt')
decrypted_image.save('decrypted_image.png')
Example -
Original Image
Run Encryption on the Original Image
$ python3 crypto_client.py --type encrypt
--image example/original.png
--output_image example/encrypted.png
--key example/encoded_key.txt
--alpha 8 --iter_max 10
encrypted image is stored at example/encrypted.png
& key is stored at example/encoded_key.txt
Encrypted Image
Run Decryption on the Encryped Image using the Key
$ python3 crypto_client.py --type decrypt
--image example/encrypted.png
--output_image example/decrypted.png
--key example/encoded_key.txt
decrypted image is stored at example/decrypted.png
Decrypted Image -
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file rubikencryptor-1.0.10.tar.gz
.
File metadata
- Download URL: rubikencryptor-1.0.10.tar.gz
- Upload date:
- Size: 4.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c9c01c4885e3f19f1a32d6be07060836ad7a5ae5e274c70ead2fe2bf8016c37 |
|
MD5 | cad92df4390a05cc548ba4d719b06f2f |
|
BLAKE2b-256 | 4cad7a337147c39ebba6162576f2b379d5bd93007d4def2f4c9cf36e221d0c39 |
File details
Details for the file rubikencryptor-1.0.10-py3-none-any.whl
.
File metadata
- Download URL: rubikencryptor-1.0.10-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.10.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 70c53473da89ec5393b59e4ea1d6b571e89075e06310cc000f403102e018bb25 |
|
MD5 | 2d10c98d6588ff5cfb48aec5fa2cd09d |
|
BLAKE2b-256 | 4603f744c7a237771d693c8c571da9e4a57aaf2d03d5e83a0a55bdb594593880 |