混沌加密解密,附带完整C#源码(原创)

logxing版权所有,转载请注明出处

在群里有人提出了这个题目,就研究了一下。确实是个不错的东东。

混沌加密算法是一个对称加密算法,即加密和解密使用相同的密钥。更特别的,其加密和解密函数也是完全一样的(这个特点可以引出一个优势,就是使用任何密钥对任何数据都可以执行解密而不会报错,这样暴力破解就很难了)。

混沌加密算法的原理是构造一个含有若干参数的迭代式,参数的微小差异会导致每次迭代的结果都毫无规律可言(即混沌的由来),用每次迭代的结果生成一个字节数据,用其与明文做异或操作生成密文。这里的迭代式及其参数值是很有讲究的,其混沌性是基于非线性数学的理论证明。最常用最简洁的迭代模型称为Logistic模型:X_n+1=u*Xn(1-Xn),其中u为参数,3.5699456<u<=4,0<Xi<1,此时该迭代式呈混沌特性。至于为什么u值的范围这么奇怪,可以查看本文附带源码中的论文。

针对字节数组的加密算法如下:

 
  
/// <summary>
/// 基于Logistic模型的混沌加解密
/// </summary>
/// <param name="data"> 要处理的数据 </param>
/// <param name="u"> 应属于[3.57,4] </param>
/// <param name="x0"> 应属于(0,1) </param>
/// <returns></returns>
public static byte [] Encrypt( byte [] data, double u, double x0)
{
byte [] res = new byte [data.Length];
double x = logistic(u, x0, 2000 );

for ( int i = 0 ; i < data.Length; i ++ )
{
x
= logistic(u, x, 5 );
res[i]
= Convert.ToByte(Convert.ToInt32(Math.Floor(x * 1000 )) % 256 ^ data[i]); // 取x小数点后3位来生成密钥
}

return res;
}

private static double logistic( double u, double x, int n)
{
for ( int i = 0 ; i < n; i ++ )
{
x
= u * x * ( 1 - x);
}
return x;
}

但混沌加密更适合的领域是图像的加密,代码如下,实际就是对像素颜色的RGB加密,生成新的图像,新图像的分辨率与原始图像一致。

 
  
/// <summary>
/// 基于Logistic模型的混沌加解密
/// </summary>
/// <param name="src"> 要处理的图像数据 </param>
/// <param name="u"> 应属于[3.57,4] </param>
/// <param name="x0"> 应属于(0,1) </param>
/// <returns></returns>
public static Bitmap Encrypt(Bitmap src, double u, double x0)
{
Bitmap dest
= new Bitmap(src.Width, src.Height);

double x = logistic(u, x0, 2000 );
int key;
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, 5 );
key
= Convert.ToInt32(Math.Floor(x * 1000 )) % 256 ;
int r = key ^ srcColor.R;
x
= logistic(u, x, 5 );
key
= Convert.ToInt32(Math.Floor(x * 1000 )) % 256 ;
int g = key ^ srcColor.G;
x
= logistic(u, x, 5 );
key
= Convert.ToInt32(Math.Floor(x * 1000 )) % 256 ;
int b = key ^ srcColor.B;

dest.SetPixel(i, j, Color.FromArgb(r, g, b));
}
}

return dest;
}

在源代码中包含了完整的使用方法,大家可以参考,有什么问题欢迎来讨论。程序界面如下图:

2011021514595528.png

2011021515002236.png

图片中的MM如果认为我侵犯了你的肖像权,请速与本人联系索赔事宜,可签订终生照顾协议。

源代码下载:http://files.cnblogs.com/logxing/chaos.rar

转载于:https://www.cnblogs.com/logxing/archive/2011/02/15/1955231.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值