📜  使用细胞自动机进行图像加密

📅  最后修改于: 2021-05-04 23:13:55             🧑  作者: Mango

提出一种使用一维元胞自动机进行图像加密和解密的图像加密系统。细胞自动机可以与基本的密码特性相对应,即平衡,免疫相关,非线性,易于在硬件中实现。与基于计算技术的经典方法相比,CA密码系统可以提供更好的性能。因此,该技术对于密码学应该是最有利的。

特征:

1.加密–

  • RGB:提取单个RGB通道以加密每个图层并合并。
  • 灰度:将给定的图像转换为灰度并用于加密。

2.解密–

  • 密钥:对每个像素使用一个密钥,以供存储在单独文件中的解密过程使用。
  • 预设:使用预定义规则解密图像。

3.结果与分析–

  • 直方图:直方图分析定义为图形表示中图像像素的频率。
  • 相关性:相关性是一种统计量度,指示两个或多个变量一起波动的程度。

4.规则选择–
可以选择要用于加密图像的规则并可以更改顺序(R30,R90,R120)。还可以添加其他规则。

实施/算法:

  • 加密–
    使用键函数将图像转换为2d矩阵并修改每个像素值。
    1. 将灰度图像作为输入。
    2. 图像被转换为2D矩阵(M)。
    3. 执行M1 = Key(M),其中M1是加密的2D矩阵。
    4. 根据所发送的像素的值是奇数还是偶数,通过使用键函数h1(M)修改M矩阵的每个像素值,该像素值存储在每个像素的单独的索引文件INF中。
    5. 然后接收修改后的像素并将其存储在M1中。
    6. 矩阵M1转换为图像并另存为加密图像。
  • 解密–
    通过使用反向技术检索原始像素
    1. 加密的图像作为输入
    2. 图像被转换为2D矩阵(M1)。
    3. 执行M = Key(M1),其中M是解密的2D矩阵。
    4. M1矩阵的每个像素值通过使用键函数h1(M)以及来自索引文件INF的相应奇/偶规则进行修改。
    5. 然后接收修改后的像素并将其存储在M1中。
    6. M矩阵被转换为图像并保存为解密图像。
  • 关键函数–
    在此,将2D矩阵作为输入,并在加密和解密期间调用此key()函数,该函数使用元胞自动机规则向量修改输入像素值。
    1. 输入像素被转换为8块的二进制数。
    2. 每个块应用不同的细胞自动机规则。
    3. 如果输入值为偶数,则规则90和30交替应用。
    4. 如果输入值是奇数,则应用规则90。
    5. 运行规则配置,直到初始输入块重复其自身为止。
    6. 记下递归阶段,并计算该循环的一半hc = n / 2。
    7. 规则再次运行,但是这次运行了一半的周期(hc)。
    8. 数组的最终输出将转换回十进制数,并放置在输入块的加密/解密值中。
    9. 重复步骤1到步骤7,直到所有灰度值都被加密/解密为止。

工具:
该图像加密系统已在Python和MATLAB上编写。

使用以下库:

OpenCV: To extract image pixels and modify it.
Numpy: To make use of arrays in key function.
Matplotlib: To obtain results (histogram, correlation) 

已应用以下元胞自动机规则:

Rule 90
Rule 30
Rule 120 

整个程序分为以下模块:

Encryption Script
Decryption Script
Result and Analysis 

应用 –
图像加密是我开发的程序的主要任务,尽管建议的系统不仅限于图像加密。可以修改该系统以实现:

  1. 编码信息
  2. 图片压缩
  3. 产生伪随机数。

项目链接:
https://github.com/Lakshyasukhralia/CellularAutomata