图像加密之灰度加密:基于 密钥 × 解钥 ≡ 1 mod 灰度级 的一轮加密算法原理和步骤

索引

算法基础

  给定数 p p p和数 G G G,考虑同余式
p x ≡ 1 m o d G px\equiv 1\text{ }\bmod G px1 modG
gcd ⁡ ( p , G ) ∣ 1 \left. \gcd \left( p,G \right) \right|1 gcd(p,G)1 gcd ⁡ ( p , G ) = 1 \gcd \left( p,G \right)=1 gcd(p,G)=1时同余式有解,记该解为
x ≡ q m o d G x\equiv q\text{ }\bmod G xq modG
∀ a ∈ Z \forall a\in \mathbb{Z} aZ,记 p a m o d G = b pa\text{ }\bmod G=b pa modG=b,即有
p a ≡ b m o d G pa\equiv b\text{ }\bmod G pab modG
则有
q b ≡ q ( p a ) = ( p q ) a ≡ a m o d G qb\equiv q\left( pa \right)=\left( pq \right)a\equiv a\text{ }\bmod G qbq(pa)=(pq)aa modG

模灰度级加密算法

  给定一幅尺寸为 M × N M\times N M×N(单位:像素)的图像 I I I,确定其灰度级数 G G G(通常是 2 2 2 n n n次幂,例如 2 2 2 8 8 8次幂,即256)。

  密钥 p ∈ Z p \in \mathbb{Z} pZ,满足 gcd ⁡ ( p , G ) = 1 \gcd \left( p,G \right)=1 gcd(p,G)=1

  解钥 q ∈ Z q \in \mathbb{Z} qZ,通过解 p q ≡ 1 m o d G pq\equiv 1\text{ }\bmod G pq1 modG求出。

加密过程

  1. 将明文 I I I加密为密文 I 1 {{I}_{1}} I1 I 1 {{I}_{1}} I1也是一个尺寸为 M × N M\times N M×N,灰度级为 G G G的图像,且每个像素处的灰度值 I 1 ( i , j ) {{I}_{1}}\left( i,j \right) I1(i,j)
    I 1 ( i , j ) = I ( i , j ) × p m o d G , i = 0 , 1 , ⋯ , M − 1 , j = 0 , 1 , ⋯ , N − 1 {{I}_{1}}\left( i,j \right)=I\left( i,j \right)\times p\text{ }\bmod G,\text{ }i=0,1,\cdots ,M-1,\text{ }j=0,1,\cdots ,N-1 I1(i,j)=I(i,j)×p modG, i=0,1,,M1, j=0,1,,N1

  2. 解密密文 I 1 {{I}_{1}} I1得到明文 I I I,每个像素处的灰度值 I ( i , j ) I\left( i,j \right) I(i,j)
    I ( i , j ) = I 1 ( i , j ) × q m o d G , i = 0 , 1 , ⋯ , M − 1 , j = 0 , 1 , ⋯ , N − 1 I\left( i,j \right)={{I}_{1}}\left( i,j \right)\times q\text{ }\bmod G,\text{ }i=0,1,\cdots ,M-1,\text{ }j=0,1,\cdots ,N-1 I(i,j)=I1(i,j)×q modG, i=0,1,,M1, j=0,1,,N1

  由上面的步骤可知,这是一种在图像空间域上的加密,是一种仅改变像素灰度值的加密,解密图像与原图没有差异。由于密钥和解钥一般不相等,因此也是一种公钥加密

Matlab代码(以灰度级为 2 8 = 256 {{2}^{8}}=256 28=256的图像为例)

I = imread('待读入的图像路径+名称');  % 读入图像
G = 256;  % 确定灰度级,默认图像是8位的,即灰度级是2^8=256
p = 5;  % 确定密钥% 检验密钥p与灰度级G的最大公因数是否为1
if gcd(p, G) ~= 1error('密钥p与灰度级G的最大公因数不是1,不存在解钥');
end% 展示原图像
figure, imshow(I);% 将图像I进行加密得到密文I1, 并可视化
I1 = mod( double(I) * p, G );
figure, imshow( uint8(I1) );% 利用简单的循环迭代找出解钥q
% 因为gcd(p, 256) = 1, 因此p一定是奇数。
% 又由于pq mod256 = 1, 因此q也一定是奇数。
q = 1;
while mod( p*q, G ) ~= 1q = q + 2;
end% 将密文I1解密得到I2, 并可视化
I2 = mod( I1 * q, G );
figure, imshow( uint8(I2) );% 比较原图像I 与 解密得到的I2 是否一致(即该算法是否有损)
% 使用isequal(), 该函数返回真值当且仅当两个矩阵相同索引处的值均相等
if isequal( double(I), I2 )disp('解密得到的图像与原图像一致');
elsedisp('解密得到的图像与原图像不一致');
end


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部