✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

👇 关注我领取海量matlab电子书和数学建模资料

🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。

📖

🔥 内容介绍

一、图像加密的重要性

在当今数字化信息时代,图像作为信息的重要载体,广泛应用于各个领域,如医疗、军事、金融等。这些图像可能包含敏感信息,如医疗影像中的患者隐私数据、军事图像中的战略情报等。为了保护图像信息的安全性,防止其被未经授权的访问、篡改或窃取,图像加密技术应运而生。通过对图像进行加密,只有拥有正确解密密钥的合法用户才能恢复原始图像,从而确保图像信息的保密性、完整性和可用性。

二、IDEA 加密算法基础

  1. 算法概述

    :国际数据加密算法(IDEA,International Data Encryption Algorithm)是一种对称密钥分组密码算法。它将明文分成固定长度的块(通常为 64 位),使用 128 位的密钥对每个块进行加密操作。IDEA 算法设计精巧,具有较高的安全性和加密效率,在密码学领域得到了广泛的研究和应用。

  2. 加密过程
    • 子密钥生成

      :IDEA 算法首先根据 128 位的主密钥生成一系列子密钥。通过特定的密钥扩展算法,将主密钥分割并经过一系列变换生成 52 个子密钥,这些子密钥在后续的加密轮次中使用。

    • 加密轮次

      :IDEA 算法通常由 8 轮加密和 1 轮输出变换组成。在每一轮加密中,64 位的明文块被分为 4 个 16 位子块 X1、X2、X3、X4。每一轮使用 6 个子密钥,依次进行模 2¹⁶ 加、模 216+1 乘以及异或等操作。例如,第一轮中,X1 与第一个子密钥进行模 216+1 乘运算,X2 与第二个子密钥进行模 2¹⁶ 加运算,然后对结果进行一系列复杂的混合运算。通过多轮加密,使得明文与密钥充分混合,增加破解难度。

    • 输出变换

      :经过 8 轮加密后,再进行一轮输出变换。这一轮使用 4 个子密钥,对前 8 轮的输出结果进行最后的处理,得到 64 位的密文块。

三、图像位平面加密方案原理

  1. 图像位平面分解

    :一幅数字图像可以看作是由多个位平面组成。例如,对于 8 位灰度图像,每个像素值可以用 8 位二进制数表示,那么该图像就可以分解为 8 个位平面,从最低有效位(LSB)到最高有效位(MSB)。位平面分解能够将图像的细节和结构信息分离,不同位平面包含不同层次的图像信息。一般来说,MSB 位平面包含图像的主要结构信息,而 LSB 位平面包含相对次要的细节信息。

  2. 基于 IDEA 的位平面加密
    • 选择加密位平面

      :根据图像的安全需求和应用场景,可以选择对部分或全部位平面进行加密。例如,对于一些对安全性要求较高的图像,可能选择对所有 8 个位平面都进行加密;而对于一些对视觉质量要求较高且安全性要求相对较低的场景,可以只对 MSB 位平面进行加密,因为 MSB 位平面的改变对图像视觉效果影响较大,加密它能在一定程度上保护图像信息,同时对图像的视觉感知影响较小。

    • 加密过程

      :将选定的位平面看作是由一系列 64 位的块组成(如果位平面的大小不是 64 的整数倍,可以进行适当的填充)。然后,使用 IDEA 加密算法对每个 64 位块进行加密。由于 IDEA 算法的安全性,经过加密后的位平面数据变得无序且难以理解,从而保护了图像的信息。

  3. 加密图像重构

    :在接收端,首先对加密后的位平面进行解密,使用与加密相同的 IDEA 密钥,按照相反的加密步骤进行解密操作,恢复出原始的位平面。然后,将解密后的位平面重新组合,按照从 MSB 到 LSB 的顺序,重新构建出完整的图像。

四、基于 IDEA 加密算法的图像位平面加密方案优势

  1. 高安全性

    :IDEA 加密算法本身具有较高的安全性,能够有效抵抗多种密码分析攻击,如差分攻击、线性攻击等。通过将其应用于图像位平面加密,使得图像信息得到了可靠的保护。即使攻击者获取了加密后的图像数据,由于 IDEA 算法的复杂性,也很难在合理的时间内破解出原始图像。

  2. 灵活性

    :可以根据实际需求选择加密不同的位平面,在安全性和图像质量之间进行灵活的权衡。对于一些对安全性要求极高的应用,加密所有位平面可以提供最大程度的保护;而对于一些对图像实时性和视觉质量要求较高的场景,选择加密关键的位平面既能保护重要信息,又能减少对图像质量的影响。

  3. 易于实现

    :IDEA 加密算法相对成熟,其实现过程相对简单,并且在各种编程语言和平台上都有相关的实现库。同时,图像位平面分解和重构的操作也较为直观,使得整个加密方案易于在实际系统中实现和应用。

📖

⛳️ 运行结果

图片

图片

📖

📣 部分代码

function [ResultDecrypt , ResultEncrypt] = process(im)

% This function give an image as input and return encrypetd  and 

%decrypted image .

%in first step of this function,idea_init recalled.

[key] = idea_init();

% Key of encryption  is used for get k of decryption.

[k] = dec_idea_init(key);

[h,w,~]=size(im);

imR(:,:)=im(:,:,1);

imG(:,:)=im(:,:,2);

imB(:,:)=im(:,:,3);

imEncryptR(:,:) = 0;

imEncryptG(:,:) = 0;

imEncryptB(:,:) = 0;

imDecryptR(:,:) = 0;

imDecryptG(:,:) = 0;

imDecryptB(:,:) = 0;

% The input plaintext has 128 bits.

for y = 1 : 4 : h

    for x = 1 : 2 : w

        plaintextR = img_2_vec(y, x, imR);

        plaintextG = img_2_vec(y, x, imG);

        plaintextB = img_2_vec(y, x, imB);

        %encryption

        strcat('Encrypting Block: (',int2str(y),',',int2str(x),')')     

        ciphertextR = cipher (plaintextR, key);

        ciphertextG = cipher (plaintextG, key);

        ciphertextB = cipher (plaintextB, key);

        %decryption

        strcat('Decrypting Block: (',int2str(y),',',int2str(x),')')

        decrypttextR = cipher(ciphertextR, k);

        decrypttextG = cipher(ciphertextG, k);

        decrypttextB = cipher(ciphertextB, k);

        %a is encrypted block

        aR = reshape(ciphertextR , 4 , 2);

        aG = reshape(ciphertextG , 4 , 2);

        aB = reshape(ciphertextB , 4 , 2);

        %b is decrypted block

        bR = reshape(decrypttextR , 4 , 2);

        bG = reshape(decrypttextG , 4 , 2);

        bB = reshape(decrypttextB , 4 , 2);

        for yy = 1 : 4

            for xx = 1 : 2

                imEncryptR(y+yy-1, x+xx-1) = aR(yy, xx);

                imEncryptG(y+yy-1, x+xx-1) = aG(yy, xx);

                imEncryptB(y+yy-1, x+xx-1) = aB(yy, xx);

                imDecryptR(y+yy-1, x+xx-1) = bR(yy, xx);

                imDecryptG(y+yy-1, x+xx-1) = bG(yy, xx);

                imDecryptB(y+yy-1, x+xx-1) = bB(yy, xx);

            end

        end

        clear plaintext ciphertext a

    end

end

    ResultEncrypt(:,:,1) = imEncryptR(:,:);

    ResultEncrypt(:,:,2) = imEncryptG(:,:);

    ResultEncrypt(:,:,3) = imEncryptB(:,:);

    ResultDecrypt(:,:,1) = imDecryptR(:,:);

    ResultDecrypt(:,:,2) = imDecryptG(:,:);

    ResultDecrypt(:,:,3) = imDecryptB(:,:);

📖

🔗 参考文献

[1]韩珂,张泽中.基于雅克比椭圆混沌映射的图像加密算法研究[J].计算机仿真, 2014, 31(5):6.DOI:10.3969/j.issn.1006-9348.2014.05.042.

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐