这是本萌新的信息安全课程的大作业 :
下面是本作业的基本概念:
1、灰度图像:
灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。
2、信息熵:
某种特定信息的出现概率(离散随机事件的出现概率)。对于任意一个随机变量X,它的信息熵定义如下,单位为比特(bit):
,式中对数一般取2为底,单位为比特
3、置换密码与代换密码:
置换密码:明文的字母保持相同但顺序被打乱。置换只不过是一个简单的换位,每个置换都可以用一个置换矩阵Ek来表示。每个置换都有一个与之对应的逆置换Dk。
代换密码:是将明文字母替换成其他字母、数字或者符号。如果把明文看成二进制序列,那么代换就是用明文位串来代换明文位串。
4、算法原理流程
程序随机产生N*M大小的灰度图像像素矩阵,每个像素值在0-255之间。加密密钥为英文小写字母,密钥的长度即为keyLength。
加密:原像素矩阵重新排列,其规则如下:宽度W为keyLength,高度H为(N*M ) / keyLength。则重新排列后的像素矩阵为W*H,此时按照密钥字母从小到大的顺序输出每个字母对应的列。至此加密完成。
解密:读取已加密的像素矩阵,每次读取(N*M)/keyLength长度的像素值,排为列,并标记顺序。读取完毕之后,根据密钥字母的顺序逐列输出像素值。至此解密完成。
5、C++模拟实现
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<stdlib.h>
#include<string>
#include<windows.h>
#include<algorithm>
#include<map>
#include<cmath>
using namespace std;
#define N 100
#define M 100
#define MAXN 255
#define MAXNN 0xfffff
int matrix[N][M];//灰度图像颜色矩阵 N*M
#define random(x) (rand()%x)