使用元胞自动机的图像加密

原文:https://www . geeksforgeeks . org/image-加密-使用-细胞自动机/

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

特征:

1。加密–

  • RGB: 提取单个 RGB 通道对各层进行加密合并。
  • 灰度:将给定图像转换为灰度并用于加密。

2。解密–

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

3。结果和分析–

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

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

实现/算法:

  • 加密– 将图像转换为 2d 矩阵,并使用关键函数修改每个像素值。
    1. 灰度图像作为输入。
    2. 图像被转换成 2D 矩阵。
    3. 执行 M1 =密钥(M),其中 M1 是加密的 2D 矩阵。
    4. 根据发送的像素值是奇数还是偶数,通过使用 Key 函数 h1(M)修改 M 矩阵的每个像素值,该值存储在每个像素的单独索引文件 INF 中。
    5. 修改后的像素随后被接收并存储在 M1。
    6. 矩阵 M1 转换为图像,并保存为加密图像。
  • 解密– 使用反向技术检索原始像素
    1. 加密图像作为输入
    2. 图像被转换成 2D 矩阵(M1)。
    3. M =执行密钥(M1),其中 M 是解密的 2D 矩阵。
    4. 使用索引文件 INF 中对应的奇/偶规则,通过使用 Key 函数 h1(M)来修改 M1 矩阵的每个像素值。
    5. 修改后的像素随后被接收并存储在 M1。
    6. 将 M 矩阵转换为图像并保存为解密图像。
  • Key Function– 这里将 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/laksyakskhralia/cellara automatia