【图像加密】基于matlab GUI正交拉丁方置乱算法图像加解密【含Matlab源码 182期】

244 阅读3分钟

一、简介

基于matlab GUI界面的图像加解密,依靠于正交拉丁方置乱加密技术。

置乱加密技术的基本思想可以追溯到大约50BC高卢战争期间,当时古罗马皇帝凯撒设计出的凯撒密码(通过把26个英文字母循环移位将明文转换成密文)。这种字母置换可以看成是一维数据流的值置换,在一定程度上达到了保护信息的目的。之后逐步发展为密本、多表代替及加乱等各种密码体制。

随着计算机技术的飞速发展,图像置乱加密技术已成为水中图形安全传输和保密存储的主要手段之一。其基本方法是把一幅图经过变换或利用数学上的知识,搅乱像素位置或颜色,将原来有意义的图像信息变化成一副“杂乱无章”的图像,无法辨认出原始图像信息,从而达到在一定能够程度上迷惑第三方的目的。为了确保其机密性,算法中一般引入密钥。图像合法接收方借助密钥,通过相应算法的逆变换可解密出原始图像,这一过程又称去乱。此外,目前给出的置乱加密算法大多数是基于数学变换的,去乱过程有时也可通过置乱加密的周期性获得。

目前,数字图像置乱加密的方法已有许多种,这些方法在一定的应用范围中各自起到了积极的作用。由于置乱加密不仅用于图像信息的保密,同时也是图像信息隐藏、图像信息保存、数字水印技术等的基础性工作,因此置乱加密算法的优劣也直接影响到其他处理的效果。
1.1 基于正交拉丁方的图像置乱变换
在这里插入图片描述
由于正交拉丁方中含有n-1互相正交的拉丁方,故这种图像置乱方法有n(n-1)种,而对于三维图像来说则有n(n-1)(n-2)种。从实验结果来看,其用图像的预处理或者后处理是非常有效的。

算法的周期性:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
和许多置乱算法一样,基于正交拉丁方的加密算法的周期性仍有待进一步研究。
1.2 基于幻方的图像置乱变换
幻方是古老的数学问题,在中国古代的“河图洛书”中已有记载。它有美妙的特性和奇异的结构,因而得到古今中外学者的关注和潜心钻研。
在这里插入图片描述
幻方变幻同样具有周期性,其变换周期就是n²。利用幻方进行置乱变换最大的困难就是寻找和图像大小匹配的幻方,而且当n比较大时,图像恢复时所要进行的变换步骤大大增加,但是变换的周期有确定规律。经过这种对图像像素的变换,打乱了像素在图像中的排列位置,从而达到加密的目的。这种变换实质是矩阵的初等变换,并且由于幻方矩阵是一有限维矩阵,经过n²次置换,又会回到原来的位置。

二、源代码

function varargout = ladingfang(varargin)
% LADINGFANG M-file for ladingfang.fig
%      LADINGFANG, by itself, creates a new LADINGFANG or raises the existing
%      singleton*.
%
%      H = LADINGFANG returns the handle to a new LADINGFANG or the handle to
%      the existing singleton*.
%
%      LADINGFANG('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in LADINGFANG.M with the given input arguments.
%
%      LADINGFANG('Property','Value',...) creates a new LADINGFANG or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before ladingfang_OpeningFunction gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to ladingfang_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help ladingfang

% Last Modified by GUIDE v2.5 05-Jan-2005 22:18:40

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @ladingfang_OpeningFcn, ...
                   'gui_OutputFcn',  @ladingfang_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin & isstr(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

三、运行结果

在这里插入图片描述

四、备注

版本:2014a