这是本菜鸡在《信息隐藏》中实现的图像加密,选用的是logistics混沌加密算法,希望对你的课设或项目有所帮助
文章目录
基于Logistic映射混沌加密算法
逻辑斯蒂(Logistic)模型
其中,参数μ∈(0,4],Xn∈(0,1),当3.5699…<μ≤4时,系统处于混沌状态,混沌系统是指在一个确定性系统中,存在着貌似随机的不规则运动,其行为表现为不确定性、不可重复、不可预测,这就是混沌现象
特点
其中,0<u ≤4称为分支参数,Xn+1 ∈(0,1)。当 1≤u < u1=3.0时 ,系统的稳态解为不动点 即周期 1解 ;当 u=u1=3.0时 ,系统 的稳态解由周期 1变为周期 2,这是二分叉过程 ; 当u=u 2=3.449489时 ,系统 的稳态解 由周期 2 分叉为周期 4;当 u= u3=3.544090时,系统 的稳 态解由周期 4分叉 为周期 8;当 达到极限值 u=3.5699456时 ,系统的稳态解是周期 2 解 ,即 3. 5699456<u ≤4时 ,logistic映射呈现混沌状态。
u=4时的特点:
随机性:当 b:4时,Logistic映射在有限迭 代 内不稳定运动 ,随后其长时间的动态行为将显示 随机性质 。
规律性:尽管 |Xn|体现出随机性质 ,但它是由确定性方程导出的,初值 x0确定后 Xn便 已确定 ,即其随机性是 内在的,这就是混沌运动的规律性
遍历性:混沌运动的遍历性是指混沌 变量 能在一定范 围内按其 自身规律不重复地遍历所有 状态。
对初值的敏感性:初值 x0的微小变化将 导致序列 {Xn}远期行为的巨大差异。
具有分形的性质:混沌的奇异吸引子在微 小尺度上具有与整体 自相似的几何结构。
二、混沌加密流程图
三、具体实现
四.核心代码实现
logistic迭代函数
private static double logistic(double u, double x, int n)
{
for (int i = 0; i < n; i++)
{
x = u * x * (1 - x);
}
return x;
}
对图片帧的像素的加密函数
public static Bitmap Encrypt(Bitmap src, double u, double x0)
{
Bitmap dest = new Bitmap(src.Width, src.Height);
int temp =Convert.ToInt32(3141 * u*u*u);
double x = logistic(u, x0, temp);
int key=0;
for (int i = 0; i < src.Width; i++)
{
for (int j = 0; j < src.Height; j++)
{
Color srcColor = src.GetPixel(i, j);
x = logistic(u, x, Convert.ToInt32(u*u));
key = Convert.ToInt32(Math.Floor((Math.Sqrt(x) * temp)) % 256);
int r = key ^ srcColor.R;//红色组件值
x = logistic(u, x, Convert.ToInt32( Math.Sqrt(u)));
key = Convert.ToInt32(Math.Floor(Math.Sqrt(x) * temp)) % 256;
int g = key ^ srcColor.G;//绿色组件值
x = logistic(u, x, Convert.ToInt32(u));
key = Convert.ToInt32(Math.Floor(Math.Sqrt(x) * temp)) % 256;
int b = key ^ srcColor.B;//蓝色组件值
dest.SetPixel(i, j, Color.FromArgb(r, g, b));
//基于指定的(红色、绿色和蓝色)创建 Color 结构
}
}
return dest;
}
五.静态图片加密演示
程序界面
参数U和X直接影响输出图像,相当于加密的私钥
加密过程
解密过程
解密需要用加密时的参数
六、动态图片加密
主要思想是先将GIF图片拆分成图片帧再分别对每个图片的像素进行加密,最后将图片帧以原GIF图片的帧延迟合并起来成新的加密后的GIF图片,解密同理
七、总结
logistics算法优点
1)安全性高: 混沌系统对初始值和参数非常敏感 ,可以提供 很大的密钥集合 ,完全满足加 密的需要 ,通过对混 沌系统生成的二进制序列进行检验 ,0和 1的分布 均匀,游程符合随机数要求 ,可以认为是随机序列 , 而且混沌加密属于流密码 ,对分组加密的攻击方法 是无效的,同时对选择 明文密文攻击方法 ,由于混 沌的单 向性和混沌信号的迭代处理 ,异或操作后密 钥流的推断几乎不可能
2)代价小:算法的代价包括时间代价和空间代价,时间代 价又分为准备时间和加密时间。通常 ,加密前的准 备时间主要是用来完成生成子密钥,加密时间主要 是在子密钥 的控制下对明文数据进行变换 ,混沌加 密属于流密码的范畴 ,它的准备时间非常短 ;加密 时由于只对数据的各个位进行异或操作 ,其时间主 要花费在密钥流的生成操作上 ,相对于 目前流行的 分组加密算法 ,其时间花费也是很少的。空间代价 分为算法实现的静止空 间和运行态空 间 L。静止 空问指算法变成程序后本身所 占用的空间 ,一般表 现为执行代码 的长度。运行态空间指在加密过程中算法所需要 的临时空间。混沌加密算法没有 s — box空间,临时变量也比较少,而且 ,它通过循环 产生密钥流 ,循环过 程中需要寄存的变量有限 ,因 此,其运行 时占用 的空间很少 ,在空间代价上是 比 较优秀的
3)易于实现 混沌加 密算法其加密和解密过程是可以重用 的,这样其所 占用 的空间大大缩小 它的软件和硬 件实现特性都 比较好。
程序实现中出现的问题
对于静态图片的加解密在功能实现上是没有问题的,但是对GIF加密图像解密后不能完全还原,解密出来的图片有噪点问题,该问题应该是在分解或合成图片时出现的,使用的相关函数是从网络中找的,自己写的加密算法本身没有问题