Skip to main content

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

  1. Create two vectors Kr and Kc with |Kr|=M & |Kc|=N. The values of these vectors are randomly picked from 0 to 2α -1

  2. Repeat below steps ITER_MAX number of times

    i. 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 right Kr[rowNumber] times Otherwise roll to the left Kr[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 up Kc[columnNumber] times. Otherwise roll the column down Kc[columnNumber] times.

    iii. XORing Pixels:

    • For every pixel(i,j), XOR the pixel with the below two values

      • Value #1 - Kc[columnNumber] if i is odd else 180 rotated bit version of Kc[columnNumber]

      • Value #2 - Kr[rowNumber] if j is even else 180 rotated bit version of Kr[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

Running

  1. 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]
  1. 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 -

Metadata

Release files for rubikencryptor 1.0.10

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for rubikencryptor 1.0.10
File Size Uploaded Provenance Actions
rubikencryptor-1.0.10.tar.gz 4.4 kB Without provenance Details for rubikencryptor-1.0.10.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for rubikencryptor 1.0.10
File Interpreter ABI Platform Actions
rubikencryptor-1.0.10-py3-none-any.whl Python 3 none any Details for rubikencryptor-1.0.10-py3-none-any.whl

Total release size: 9.2 kB

Release files / rubikencryptor-1.0.10.tar.gz

Download URL rubikencryptor-1.0.10.tar.gz
Size 4.4 kB
Tags Source
SHA-256 checksum
How to use checksums
5c9c01c4885e3f19f1a32d6be07060836ad7a5ae5e274c70ead2fe2bf8016c37
BLAKE2b-256 checksum
How to use checksums
4cad7a337147c39ebba6162576f2b379d5bd93007d4def2f4c9cf36e221d0c39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Release files / rubikencryptor-1.0.10-py3-none-any.whl

Download URL rubikencryptor-1.0.10-py3-none-any.whl
Size 4.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70c53473da89ec5393b59e4ea1d6b571e89075e06310cc000f403102e018bb25
BLAKE2b-256 checksum
How to use checksums
4603f744c7a237771d693c8c571da9e4a57aaf2d03d5e83a0a55bdb594593880
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.9

Security for rubikencryptor 1.0.10

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page