C#实现基于Logistic映射混沌加密算法(可加密静态图片和动态图片)

这是本菜鸡在《信息隐藏》中实现的图像加密,选用的是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加密图像解密后不能完全还原,解密出来的图片有噪点问题,该问题应该是在分解或合成图片时出现的,使用的相关函数是从网络中找的,自己写的加密算法本身没有问题

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值