基于SHA256和区块链技术的图像加解密matlab仿真

本文详细解释了SHA-256算法的工作原理,以及如何基于SHA-256进行图像加密,利用区块链结构增强安全性。同时,展示了MATLAB中的加密与解密过程,以及对图像完整性的验证。
摘要由CSDN通过智能技术生成

目录

1. SHA-256算法原理

2. 基于SHA-256的图像加密原理

3.基于区块链的图像解密原理

4.MATLAB核心程序

5.仿真结果


        SHA-256(安全哈希算法-256位)是SHA-2系列算法之一,由NSA设计。SHA-256将任意长度的输入(在本例中为图像数据)通过一系列复杂的运算转换成一个256位(32字节)的哈希值。这个哈希值几乎唯一地标识了输入数据:即使是微小的输入变化,也会导致输出哈希值的巨大变化。

1. SHA-256算法原理

       SHA-256算法是Secure Hash Algorithm 2家族中的一员,是一种广泛应用的密码散列函数,特别适用于数字签名、数据完整性校验和消息认证码(MAC)等场景。其设计目标是将任意长度的输入(称作消息)映射成固定长度的输出(称为散列值或摘要),并且该映射过程具有高度的离散性和单向性(即很难从散列值推导出原始消息)。

       SHA-256(Secure Hash Algorithm 256 bits)是一种安全散列算法,它将任意长度的消息数据转化为一个固定长度(256位)的散列值,这个过程是不可逆的。散列值用于验证数据的完整性,即所谓的“指纹”:

       H(M)=SHA-256(M)

其中 M 是原始输入数据,H(M) 是256位的散列值。

      SHA-256算法具体工作原理可以概括为以下几个核心步骤:

消息预处理:

填充:首先,将原始消息在其末尾添加一个“1”比特,然后补充0比特直到总长度达到最接近的比512比特的倍数且最后64比特等于原始消息长度的比特表示(以小端序)。
分组:填充后的消息被划分为多个512比特的数据块。

初始化变量:

SHA-256定义了八个32比特的初始常量(哈希值),它们是预先设定好的特定数值。

处理消息块:

对于每一个512比特的消息块,执行以下步骤:

将消息块划分为16个32比特的词(W0到W15)。
执行一系列循环操作,其中包括:
扩展操作:对每个词进行逻辑右移和循环左移操作,以及将相邻词异或起来,生成64个扩展词(W[i],i=16至63)。
压缩函数:将上述扩展词与当前的内部状态(也是一组32比特的词)进行一系列逻辑和算术运算,包括异或、与、非、加法等,最终更新内部状态。

输出摘要:

       当所有的消息块都被处理过后,内部状态的8个32比特词合并得到最终的256比特散列值,即SHA-256摘要。
       整个算法的设计确保了即使在输入消息仅改变一位的情况下,输出的散列值也会发生显著变化,从而满足了密码学上要求的雪崩效应。SHA-256至今尚未发现重大安全漏洞,在许多安全敏感的应用领域仍被认为是安全的散列函数之一。然而,随着计算能力的提升,针对SHA-256的暴力攻击逐渐变得更为可能,特别是在寻找碰撞的情况下,SHA-3族(如Keccak)已经取代SHA-2成为新的推荐标准,尽管SHA-256仍在广泛应用中保持安全有效。

2. 基于SHA-256的图像加密原理

图像分割:将图像分成若干个块(比如32x32像素大小的块)。

数据扩展:将每一块图像数据与密钥(或Genesis Block的某些特征)进行异或操作(XOR)加密:

散列嵌入:对加密后的每个块计算SHA-256散列值,并将散列值附加到下一个块的加密过程中,形成链式结构,类似区块链的区块链接机制。

循环迭代:每次迭代更新密钥,例如使用上一次散列值的一部分作为下一次加密的密钥,增加破解难度。

3.基于区块链的图像解密原理

       解密过程实质上是加密过程的逆操作,但是因为采用了链式结构和密钥的迭代更新,所以不能直接逆运算。解密时需要正确的密钥顺序和来源(即区块链的结构):

       密钥恢复:按照区块链的方式从最后一个加密块开始,使用已知的正确散列值(从区块链中获取)反推出相应的密钥。

      图像块解密:根据恢复的密钥对加密块进行异或操作解密:

       验证完整性:解密每个块后,使用该块的散列值与从区块链中提取的实际散列值进行对比,确认数据的完整性。

4.MATLAB核心程序

............................................................
% 加密过程
for i=1:m
    for j=1:32:n
        % 提取图像子块
        temp=x(i,j:j+31);
        % 使用 Genesis Block 与图像子块进行异或操作
        y(i,j:j+31)=bitxor(Gb(k,:),x(i,j:j+31));
        % 计算加密后的子块的 SHA256 哈希值作为新的 Genesis Block
        Gb(k+1,:) = uint8(sha256hasher.ComputeHash(y(i,j:j+31)));k=k+1;
    end
end
% 显示加密后的图像及直方图,并分别附上标题
figure,imshow(y); title('加密图像');
figure,imhist(y); title('加密图像直方图');
% 解密过程(注:该部分代码未启用计时功能)
Gb1(1)=Gb(1)+10;
y(1,1)=y(1,1)+7;% 对加密图像的某个位置进行修改
z=uint8(zeros(m,n));% 初始化解密后的图像矩阵 z 为与原图像相同尺寸的全零矩阵
k=1;
for i=1:m
    for j=1:32:n
 % 使用 Genesis Block 与加密子块进行异或操作以解密
        Gb1(k+1,:) = uint8(sha256hasher.ComputeHash(y(i,j:j+31)));
        z(i,j:j+31)=bitxor(Gb1(k,:),y(i,j:j+31));k=k+1;
    end
end
% toc
figure,imshow(z); title('基于区块链解密后的图像');
figure,imhist(z); title('基于区块链解密后图像的直方图');
z1=z(:);
z2(Ind)=z1;
Z=reshape(z2,m,n);
isequal(X,Z)
figure,imshow(Z); title('解密后的图像');
figure,imhist(Z); title('解密后图像的直方图');
4061

5.仿真结果

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fpga和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值