文档库 最新最全的文档下载
当前位置:文档库 › LSB算法实现

LSB算法实现

LSB算法实现
LSB算法实现

LSB算法实现实验报告

一、实验环境

1、计算机一台;

2、Windows XP操作系统、MATLAB7.5

二、实验内容与原理

LSB(Least Significant Bit)算法是将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。

LSB算法的基本原理:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。因此LSB算法最初是用于脆弱性水印的。

LSB算法基本步骤:

1、将得到的隐藏有秘密信息的十进制像素值转换为二进制数据;

2 、用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位;

3、将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。

图1. LSB原理示意图

三、实验步骤

3.1信息嵌入

Picture=imread(‘c:\\test.tif’); %读入载体图像

Double_Picture=Picture;

Double_Picture=double(Double_Picture);

%将图像转换为二进制

‘c:\\test.txt’_id=fopen(‘c:\\test.txt’,'r'); %读取秘密信息文件

[msg,len]=fread(‘c:\\test.txt’_id,'ubit1');

[m,n]=size(Double_Picture);

p=1; %p 为秘密信息的位计数器for f2=1:n

for f1=1:m

Double_Picture(f1,f2)=Double_Picture(f1,f2)-mod(Double_

Picture(f1,f2),2)+msg(p,1);

%将秘密信息按位隐藏入连续的像素中

if p==len

break;

end

p=p+1;

end

if p==len

break;

end

end

Double_Picture=uint8(Double_Picture);

imwrite(Double_Picture,‘c:\\result.tif’); %生成秘密信息

subplot(121);imshow(Picture);title(' 未嵌入信息的图片');

subplot(122);imshow(Double_Picture);title(' 嵌入信息的图片');

图2. 嵌入信息前后结果图

3.2 信息提取

Picture=imread(‘c:\\result.tif’); %读入隐秘信息的图像

Picture=double(Picture);

[m,n]=size(Picture);

frr=fopen(‘c:\\result.txt’,'a');

len=8; %设定隐秘信息长度

p=1;

for f2=1:n

for f1=1:m

if bitand(Picture(f1,f2),1)==1

%顺序提取图像相应像素LSB 的秘密信息

fwrite(frr,1,'bit1');

result(p,1)=1;

else

fwrite(frr,0,'bit1');

result(p,1)=0;

end

if p==len %判断秘密信息是否读完

break;

end

p=p+1;

end

if p==len

break;

end

end

fclose(frr);

图 3 提取结果

四、结论

基于Matlab 实现了图像的LSB 信息隐藏算法,并讨论了两种图像像素选择算法,通过比较可以发现,使用随机选择算法会将秘密信息均匀地嵌入到整个图像中,增强了秘密信息的不可见性和破解的难度,而顺序选择算法则容易受到视觉攻击。从以上分析可知图像嵌入像素位置的选择对秘密信息的安全性有着至关重要的作用。为了实现增强LSB 算法的安全性,可以在信息嵌入前对其进行加密处理。

RC4加密算法C语言实现

RC4 加密算法 C 语言实现 代码文件名 RC4.cpp Encrypt.h (代码详见后文) 备注:将以上两个文件放在相同的路径(建议不要放在中文路径 下)编译执行!编译环境 Microsoft Visual C++ 6.0 C-Free 5.0 代码解释 RC4 加密算法是大名鼎鼎的RSA 三人组中的头号人物Ron Rivest 在1987 年设计的密钥长度可变的流加密算法簇。之所以称其为簇,是由于其核心部分的S-box 长度可为任意,但一般为256字节。该算法的速度可以达到DES 加密的10倍左右。 RC4 算法的原理很简单,包括初始化算法和伪随机子密码生成算法两大部分。假设S-box 长度和密钥长度均为为n。先来看看算法的初始化部分(用类C伪代码表示): for (i=0; i

} 得到的子密码sub_k用以和明文进行xor运算,得到密文,解密过程也完全相同。 RC4加密算法在C++中的实现: RC4函数(加密/解密):其实RC4只有加密,将密文再加密一次,就是解密了。 GetKey函数:随机字符串产生器。 ByteToHex函数:把字节码转为十六进制码,一个字节两个十六进制。十六进制字符串非常适合在HTTP中传输。 HexToByte函数:把十六进制字符串,转为字节码。。 Encrypt函数:把字符串经RC4加密后,再把密文转为十六进制字符串返回,可直接用于传输。 Decrypt函数:直接密码十六进制字符串密文,再解密,返回字符串明文。 源代码 以下为Encrypt.h文件代码 #ifndef _ENCRYPT_RC4_ #defi ne _ENCRYPT_RC4_ #in clude #defi ne BOX_LEN 256 int GetKey(c onst un sig ned char* pass, int pass_le n, un sig ned char *out); int RC4(c onst un sig ned char* data, int data_le n, const un sig ned char* key, int key_le n, un sig ned char* out, i nt* out_le n); static void swap_byte( un sig ned char* a, un sig ned char* b); char* En crypt(co nst char* szSource, const char* szPassWord); // 加密,返回加密结果 char* Decrypt(co nst char* szSource, con st char* szPassWord); // 解密,返回解密结果 char* ByteToHex(c onst un sig ned char* vByte, const int vLe n); // 把字节码pbBuffer转为十六进制字符串,方便传输 unsigned char* HexToByte(const char* szHex); // 把十六进制字符串转为字节码pbBuffer,解码 #e ndif // #ifndef _ENCRYPT_RC4_

LSB数字水印算法

一.数字水印 数字水印技术 数字水印技术(Digital Watermark):技术是将一些标识信息(即数字水印)直接嵌入数字载体(包括多媒体、文档、软件等)当中,但不影响原载体的使用价值,也不容易被人的知觉系统(如视觉或听觉系统)觉察或注意到。目前主要有两类数字水印,一类是空间数字水印,另一类是频率数字水印。空间数字水印的典型代表是最低有效位(LSB)算法,其原理是通过修改表示数字图像的颜色或颜色分量的位平面,调整数字图像中感知不重要的像素 来表达水印的信息,以达到嵌入水印的目的。频率数字水印的典型代表是扩展频谱算法,其原理是通过时频分析,根据扩展频谱特性,在数字图像的频 率域上选择那些对视觉最敏感的部分,使修改后的系数隐含数字水印的信息。 可视密码技术 二.可视密码技术:可视密码技术是Naor和Shamir于1994年首次提出 的,其主要特点是恢复秘密图像时不需要任何复杂的密码学计算,而是以人的视觉即可将秘密图像辨别出来。其做法是产生n张不具有任何意义的胶片,任取其中t张胶片叠合在一起即可还原出隐藏在其中的秘密信息。其后,人们又对该方案进行了改进和发展。主要的改进办法办法有:使产生的n张胶片都有一定的意义,这样做更具有迷惑性;改进了相关集合的造方法;将针对黑白图像的可视秘密共享扩展到基于灰度和彩色图像的可视秘密共享。 三. 数字水印(Digital Watermark或称Steganography)技术是指用信号处理的方法在数字化的多媒体数据中嵌入隐蔽的标记,这种标记通常是不可见的,只有通过专用的检测器或阅读器才能提取。数字水印是信息隐藏技术的一个重要研究方向。 数字水印技术源于开放的网络环境下保护多媒体版权的新型技术,它可验证数字产品的

蚁群算法简述及实现

蚁群算法简述及实现 1 蚁群算法的原理分析 蚁群算法是受自然界中真实蚁群算法的集体觅食行为的启发而发展起来的一种基于群体的模拟进化算法,属于随机搜索算法,所以它更恰当的名字应该叫“人工蚁群算法”,我们一般简称为蚁群算法。M.Dorigo等人充分的利用了蚁群搜索食物的过程与著名的TSP问题的相似性,通过人工模拟蚁群搜索食物的行为来求解TSP问题。 蚂蚁这种社会性动物,虽然个体行为及其简单,但是由这些简单个体所组成的群体却表现出及其复杂的行为特征。这是因为蚂蚁在寻找食物时,能在其经过的路径上释放一种叫做信息素的物质,使得一定范围内的其他蚂蚁能够感觉到这种物质,且倾向于朝着该物质强度高的方向移动。蚁群的集体行为表现为一种正反馈现象,蚁群这种选择路径的行为过程称之为自催化行为。由于其原理是一种正反馈机制,因此也可以把蚁群的行为理解成所谓的增强型学习系统(Reinforcement Learning System)。 引用M.Dorigo所举的例子来说明蚁群发现最短路径的原理和机制,见图1所示。假设D 和H之间、B和H之间以及B和D之间(通过C)的距离为1,C位于D和B的中央(见图1(a))。现在我们考虑在等间隔等离散世界时间点(t=0,1,2……)的蚁群系统情况。假设每单位时间有30只蚂蚁从A到B,另三十只蚂蚁从E到D,其行走速度都为1(一个单位时间所走距离为1),在行走时,一只蚂蚁可在时刻t留下浓度为1的信息素。为简单起见,设信息素在时间区间(t+1,t+2)的中点(t+1.5)时刻瞬时完全挥发。在t=0时刻无任何信息素,但分别有30只蚂蚁在B、30只蚂蚁在D等待出发。它们选择走哪一条路径是完全随机的,因此在两个节点上蚁群可各自一分为二,走两个方向。但在t=1时刻,从A到B的30只蚂蚁在通向H的路径上(见图1(b))发现一条浓度为15的信息素,这是由15只从B走向H的先行蚂蚁留下来的;而在通向C的路径上它们可以发现一条浓度为30的信息素路径,这是由15只走向BC的路径的蚂蚁所留下的气息与15只从D经C到达B留下的气息之和(图1(c))。这时,选择路径的概率就有了偏差,向C走的蚂蚁数将是向H走的蚂蚁数的2倍。对于从E到D来的蚂蚁也是如此。 (a)(b)(c) 图1 蚁群路径搜索实例 这个过程一直会持续到所有的蚂蚁最终都选择了最短的路径为止。 这样,我们就可以理解蚁群算法的基本思想:如果在给定点,一只蚂蚁要在不同的路径中选择,那么,那些被先行蚂蚁大量选择的路径(也就是信息素留存较浓的路径)被选中的概率就更大,较多的信息素意味着较短的路径,也就意味着较好的问题回答。

基于LSB算法的图像信息隐藏与检测

数字图像隐写分析 基于LSB算法的图像信息隐藏与检测 学院名称计算机科学与技术学院 专业班级 学生姓名 学号 指导教师 2016.05.01 基于LSB算法的图像信息隐藏与检测 摘要:LSB替换隐写基本思想是用嵌入的秘密信息取代载体图像的最低比特位,原来的的7个高位平面与替代秘密信息的最低位平面组合成含隐藏信息的新图形。文章首先简

单叙述了BMP位图文件的文件格式,然后根据24位真彩色BMP位图格式与显示方式的特殊性,直接改变图像中像素的最后一位值来嵌入秘密文件,提出了一种对文字信息进行加密的有效方案。 关键词:LSB,信息隐藏,信息安全,BMP位图 Image information hiding and detection based on LSB algorithm

Abstract: LSB replacement steganography basic idea is to use the embedded secret information to replace the image of the lowest bits, the original 7 high plane and the least significant bit plane of alternative secret information into new graphics containing hidden information.This paper simple describes the BMP file format of the bitmap file, and then according to the 24 true color BMP bitmap format and the particularity of display mode, directly change the values of pixels in the image of the last to embed secret files, puts forward a effective scheme of text information is encrypted. Key words: LSB, Information hiding,information security,bit map file 目录 第1章绪论 (5)

LSB算法实现

LSB算法实现实验报告 一、实验环境 1、计算机一台; 2、Windows XP操作系统、MATLAB7.5 二、实验内容与原理 LSB(Least Significant Bit)算法是将秘密信息嵌入到载体图像像素值的最低有效位,也称最不显著位,改变这一位置对载体图像的品质影响最小。 LSB算法的基本原理:对空域的LSB做替换,用来替换LSB的序列就是需要加入的水印信息、水印的数字摘要或者由水印生成的伪随机序列。由于水印信息嵌入的位置是LSB,为了满足水印的不可见性,允许嵌入的水印强度不可能太高。然而针对空域的各种处理,如游程编码前的预处理,会对不显著分量进行一定的压缩,所以LSB算法对这些操作很敏感。因此LSB算法最初是用于脆弱性水印的。 LSB算法基本步骤: 1、将得到的隐藏有秘密信息的十进制像素值转换为二进制数据; 2 、用二进制秘密信息中的每一比特信息替换与之相对应的载体数据的最低有效位; 3、将得到的含秘密信息的二进制数据转换为十进制像素值,从而获得含秘密信息的图像。 图1. LSB原理示意图 三、实验步骤 3.1信息嵌入 Picture=imread(‘c:\\test.tif’); %读入载体图像 Double_Picture=Picture; Double_Picture=double(Double_Picture); %将图像转换为二进制 ‘c:\\test.txt’_id=fopen(‘c:\\test.txt’,'r'); %读取秘密信息文件 [msg,len]=fread(‘c:\\test.txt’_id,'ubit1');

[m,n]=size(Double_Picture); p=1; %p 为秘密信息的位计数器for f2=1:n for f1=1:m Double_Picture(f1,f2)=Double_Picture(f1,f2)-mod(Double_ Picture(f1,f2),2)+msg(p,1); %将秘密信息按位隐藏入连续的像素中 if p==len break; end p=p+1; end if p==len break; end end Double_Picture=uint8(Double_Picture); imwrite(Double_Picture,‘c:\\result.tif’); %生成秘密信息 subplot(121);imshow(Picture);title(' 未嵌入信息的图片'); subplot(122);imshow(Double_Picture);title(' 嵌入信息的图片'); 图2. 嵌入信息前后结果图 3.2 信息提取 Picture=imread(‘c:\\result.tif’); %读入隐秘信息的图像 Picture=double(Picture); [m,n]=size(Picture); frr=fopen(‘c:\\result.txt’,'a'); len=8; %设定隐秘信息长度 p=1; for f2=1:n for f1=1:m if bitand(Picture(f1,f2),1)==1 %顺序提取图像相应像素LSB 的秘密信息 fwrite(frr,1,'bit1'); result(p,1)=1;

基本蚁群算法

蚁群算法浅析 摘要:介绍了什么是蚁群算法,蚁群算法的种类,对四种不同的蚁群算法进行了分析对比。详细阐述了蚁群算法的基本原理,将其应用于旅行商问题,有效地解决了问题。通过对旅行商问题C++模拟仿真程序的详细分析,更加深刻地理解与掌握了蚁群算法。 关键词:蚁群算法;旅行商问题;信息素;轮盘选择 一、引言 蚁群算法(Ant Colony Optimization, ACO),是一种用来在图中寻找优化路径的算法。它由Marco Dorigo于1992年在他的博士论文中提出,其灵感来源于蚂蚁在寻找食物过程中发现路径的行为。蚁群算法是一种模拟进化算法,初步的研究表明该算法具有许多优良的性质。 蚁群算法成功解决了旅行商问题(Traveling Salesman Problem, TSP):一个商人要到若干城市推销物品,从一个城市出发要到达其他各城市一次而且最多一次最后又回到第一个城市。寻找一条最短路径,使他从起点的城市到达所有城市一遍,最后回到起点的总路程最短。若把每个城市看成是图上的节点,那么旅行商问题就是在N个节点的完全图上寻找一条花费最少的回路。 最基本的蚁群算法见第二节。目前典型的蚁群算法有随机蚁群算法、排序蚁群算法和最大最小蚁群算法,其中后两种蚁群算法是对前一种的优化。本文将终点介绍随机蚁群算法。 二、基本蚁群算法 (一)算法思想 各个蚂蚁在没有事先告诉他们食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环境释放一种信息素,信息素多的地方显然经过这里的蚂蚁会多,因而会有更多的蚂蚁聚集过来。假设有两条路从窝通向食物,开始的时候,走这两条路的蚂蚁数量同样多(或者较长的路上蚂蚁多,这也无关紧要)。当蚂蚁沿着一条路到达终点以后会马上返回来,这样,短的路蚂蚁来回一次的时间就短,这也意味着重复的频率就快,因而在单位时间里走过的蚂蚁数目就多,洒下的信息素自然也会多,自然会有更多的蚂蚁被吸引过来,从而洒下更多的信息素。因此,越来越多地蚂蚁聚集到较短的路径上来,最短的路径就找到了。 蚁群算法的基本思想如下图表示:

课设lsb算法

信息隐藏课设 LSB算法实验步骤 隐藏提取及测试 (1)隐藏算法,保存在hide_lsb.m文件中。 function o = hide_lsb(block, data, I) %function o = hide_lsb(block, data, I) %block:the minimal ceil to hide %data:the information %I:source image si = size(I); lend = length(data); %将图像划分为M*N个小块 N = floor(si(2) / block(2)); M = min(floor(si(1) / block(1)), ceil(lend / N)); o = I; fori = 0 : M-1 %计算每小块垂直方向起止位置 rst = i * block(1) + 1; red = (i + 1) * block(1); for j = 0 : N-1 %计算每小块隐藏的秘密信息的序号 idx = i * N + j + 1; ifidx> lend

break; end; %取每小块隐藏的秘密信息 bit = data(idx); %计算每小块水平方向起止位置 cst = j * block(2) + 1; ced = (j + 1) * block(2); %将每小块最低位平面替换为秘密信息 o(rst:red, cst:ced) = bitset(o(rst:red, cst:ced), 1, bit); end; end; (2)提取算法,保存在dh_lsb.m文件中。 function out = dh_lsb(block, I) %function out = dh_lsb(block, I) %block:the minimal ceil to dehide %I:stegoed image si = size(I); %将图像划分为M*N个小块 N = floor(si(2) / block(2)); M = floor(si(1) / block(1)); out = []; %计算比特1判决阈值:即每小块半数以上元素隐藏的是比特1时,判决该小块嵌入的信息为1 thr = ceil((block(1) * block(2) + 1) / 2); idx = 0; fori = 0 : M-1 %计算每小块垂直方向起止位置

补充全排列算法C语言实现

字符串全排列算法C语言实现 问题描述: 输入一个字符串,打印出该字符串中字符的所有排列。 输入: 123 输出: 123 132 213 231 312 321 问题分析: 现象分析: 这种问题,从直观感觉就是用递归方法来实现即:把复杂问题逐渐简单化,进而得出具体代码实现。(如何发现一个问题可以使用递归方式来解决?经分析可以发现:M 个数的排列方法与N(N>M)个数的排列方法没有区别,处理方法与数据的个数没有关系。 处理方法的一致性,就可以采用递归)。 3个数(123)排列,第一位1不动,剩下两个数(23)的排列,只要相互颠倒一下,就可以出现关于1开头的所有排列 123 132 把2换到第一位,保持不动,剩下的两个数(13)的排列,只要相互颠倒一下,就可以出现关于2开头的所有排列 213 231 同理,把3换到第一位,可得到 312 321 扩展: 把3个数的所有排列,前面加一个4,就可以得到关于4开头的所有的排列4123 4132 4213 4231 4312 4321 若把4与后续数据中的任意一个数据交换,通过完成对后续三个数的全排列,就可以得到相应的数开头的四数的排列。 总结: 对4个数的排列,可以转换成首位不动,完成对3个数的排列 对3个数的排列,可以转换成首位不动,完成对2个数的排列 对2个数的排列,可以转换成首位不动,完成对1个数的排列 对于1个数,无排列,直接输出结果 算法实现说明:

对n个数的排列,分成两步: (1)首位不动,完成对n-1个数的排列, (2)循环将后续其他数换到首位,再次进行n-1个数的排列 注:排列完成后,最终的串要与原串相同 C语言代码实现: #include #include //将串左移一位,首位存到末尾。 void shift( char *s ) { if ( !s||!s[0] ) return ; //security code . null string char ch=s[0]; int i=0; while( s[++i] ) s[i-1]=s[i] ; s[i-1]=ch; } //本函数对于一个已排序好的数据进行全排列 void permutation(char list[], int head ) { int i,len; len=strlen(list) ; if ( len-head == 1 ) //后续没有再排列的,则输出排列数据 { printf( "%s\n", list ); } else { for (i = k; i

基于LSB的信息隐藏算法

《信息隐藏技术》实验 实验三:基于LSB的信息隐藏算法 学生姓名:学号: 学院: 计算机学院 专业: 信息安全 班级: 指导教师: 2015年 12 月 16 日

目录 1 实验目的 (2) 2 实验环境及内容 (2) 3 实验原理 (2) 4 实验步骤 (3) 5 实验思考和总结 (12)

1实验目的 该实验为验证性实验。目的是通过实验使学生掌握经典隐藏算法,在MATLAB环境下,编写基于图像的LSB信息隐藏算法程序。用MATLAB 函数实现LSB信息隐藏,并进行分析。 2实验环境及内容 ●实验环境 安装MATLAB7.0的计算机 ●实验内容 首先学会提取图片的八个位平面,然后再将信息隐藏在最低位平面中。 3实验原理 LSB(least significant bit)算法是最早提出的一种典型的空间域信息隐藏算法。它使用特定的密钥通过伪随机序列发生器产生随机信号,然后按一定的规则排列成二维水印信号,并逐一插到原始图像相应像素值的最低几位。由于水印信号隐藏在最低位,相当于叠加了一个能量微弱的信号,因此在视觉和听觉上很难察觉。作为大数据量的信息隐藏方法,LSB在隐藏通信中仍占据相当重要的地位。 隐秘算法核心是将我们选取的像素点的最不重要位依次替换成秘密信息,以达到信息隐秘的目的。嵌入过程包括选择一个图像载体像

素点的子集{j1,…,jl(m)},然后在子集上执行替换操作像素cji←→mi,即把cji的LSB与秘密信息mi进行交换(mi可以是1或0)。一个替换系统也可以修改载体图像像素点的多个比特,例如,在一个载体元素的两个最低比特位隐藏两比特、三比特信息,可以使得信息嵌入量大大增加但同时将破坏载体图像的质量。在提取过程中,找出被选择载体图像的像素序列,将LSB(最不重要位)排列起来重构秘密信息,算法描述如下: 嵌入过程:for(i=1;i<=像素序列个数;i++) si←ci for(i=1;i<=秘密消息长度;i++) //将选取的像素点的最不重要位依次替换成秘密信息 sji←cji←→mi 4实验步骤 提取位平面源代码 a = imread('1.jpg'); b = rgb2gray(a); %将彩色图像转换为灰度图像 c = bitand(b, 1); figure(1); imshow(c); d = bitand(b, 2);

王能超 计算方法——算法设计及MATLAB实现课后代码

第一章插值方法 1.1Lagrange插值 1.2逐步插值 1.3分段三次Hermite插值 1.4分段三次样条插值 第二章数值积分 2.1 Simpson公式 2.2 变步长梯形法 2.3 Romberg加速算法 2.4 三点Gauss公式 第三章常微分方程德差分方法 3.1 改进的Euler方法 3.2 四阶Runge-Kutta方法 3.3 二阶Adams预报校正系统 3.4 改进的四阶Adams预报校正系统 第四章方程求根 4.1 二分法 4.2 开方法 4.3 Newton下山法 4.4 快速弦截法 第五章线性方程组的迭代法 5.1 Jacobi迭代 5.2 Gauss-Seidel迭代 5.3 超松弛迭代 5.4 对称超松弛迭代 第六章线性方程组的直接法 6.1 追赶法 6.2 Cholesky方法 6.3 矩阵分解方法 6.4 Gauss列主元消去法

第一章插值方法 1.1Lagrange插值 计算Lagrange插值多项式在x=x0处的值. MATLAB文件:(文件名:Lagrange_eval.m)function [y0,N]= Lagrange_eval(X,Y,x0) %X,Y是已知插值点坐标 %x0是插值点 %y0是Lagrange插值多项式在x0处的值 %N是Lagrange插值函数的权系数 m=length(X); N=zeros(m,1); y0=0; for i=1:m N(i)=1; for j=1:m if j~=i; N(i)=N(i)*(x0-X(j))/(X(i)-X(j)); end end y0=y0+Y(i)*N(i); end 用法》X=[…];Y=[…]; 》x0= ; 》[y0,N]= Lagrange_eval(X,Y,x0) 1.2逐步插值 计算逐步插值多项式在x=x0处的值. MATLAB文件:(文件名:Neville_eval.m)function y0=Neville_eval(X,Y,x0) %X,Y是已知插值点坐标 %x0是插值点 %y0是Neville逐步插值多项式在x0处的值 m=length(X); P=zeros(m,1); P1=zeros(m,1); P=Y; for i=1:m P1=P; k=1; for j=i+1:m k=k+1;

基于数字图像LSB隐写算法的研究

《新技术讲座》课程 课程大作业 作业名称:基于数字图像LSB隐写算法的研究姓名: 其他组员: 学号: 班级: 完成时间:2013年11月2日

基于图像LSB隐写算法的研究 (XX大学XX学院XX XX地联系方式) 摘要:本文先对信息隐藏技术、隐藏模型、隐写术、隐写算法等进行了简单介绍,然后借助软件matlab7.0,采用空域隐写算法LSB将秘密信息嵌入数字图像,完成隐写;接着将嵌入的秘密信息提取出来,通过计算其峰值信噪比PSNR来评估该隐写算法的不可感知性,证实了LSB嵌入时在图像的最不重重要位加载秘密信息,一定程度上加强了秘密信息的不可感知性;再通过缩小和放大二倍来分析隐写算法的鲁棒性,试验结果表明,该算法计算量低,在低嵌入率时检测结果准确,优势明显,而对嵌入率较高的载秘图像,需要修正后才能达到常规检测的标准;最后,在实验总结基础上提出了一些建议,并对未来进行了展望。 关键词:信息隐藏技术隐写算法LSB信息嵌入信息提取PSNR不可感知性鲁棒性

第一部分 1.引言 随着计算机技术、信息处理技术和计算机网络技术的飞速发展,Intemet在世界范围内得到了大力推广,各种数字信息的制作、传输、存储和处理由此变得越来越简单。通过互联网,人们可以快捷高效地获得图像、声音和文本等各种多媒体数据,分享海量的信息资源。各种机密信息,如个人的信用卡账号逐渐在网络通信中出现。然而,全球互联网是一个开放的系统,虽然普通用户可以通过网络方便、快捷地交流信息,但是随之而出现的问题也十分严重:个人的隐私的安全如帐号、个人信息、密码口令、电子邮件等能否得到保障;多媒体作品的版权能否得到应有的保护;电子商务中的企业机密能否不被商业间谍所窃取;涉及到国家安全、政府绝密的文件在网络中能否被安全地传输等。因此,蓬勃发展的网络使得信息传输和交流更加简单易行的同时,也对关系国家安全、经济发展乃至个人隐私等方而的信息安全提出了更高的要求。国内外各界已经高度重视如何在既能有效地保证各种信息的安全这个大前提下,也能充分利用Internet便利的问题,由此一门新兴的交叉学科——信息隐藏诞生了。 2.概述 现代的信息隐藏技术来源于古老的隐写术,隐写术在希腊语中就是秘密+书写的意思,它是将秘密信息隐藏于非秘密或者不太秘密的信息中的方法,信息隐藏学研究的是在信息中隐藏信息,它是一门既古老又年轻的学科。传统的隐写术,如:显隐墨水、修改公共文本的约定、代码字、藏头诗等等,古代就已经出现了,远早于电子/计算机密码技术。信息隐藏研究虽然可以追溯到古老的隐写术,但在国际上正式提出数字化信息隐藏研究则是在1992年。 ①信息隐藏技术 现在所说的信息隐藏技术是指将秘密信息隐藏在其它媒体(如音频、视频、图像)中,通过载体的传输,实现秘密信息的传递。它通常以音频、视频或图像中的一种作为载体,将秘密信息嵌入到其中,以一种只有接收者才知道信息存在的秘密途径传送信息。信息隐藏的目的在于保证隐藏的信息不引起人们的注意。和加密技术相比,信息隐藏技术摆脱了数据加密技术的致命缺陷,可以在看似很正常的载体中嵌入信息进行传递,大大增加了隐秘通信的隐蔽性。信息隐藏技术包括了数字水印技术和隐写术两个重要分支。数字水印技术是指用数字信号处理的方法在多媒体数据中嵌入隐蔽的标记,它通常应用在防伪和版权保护;隐写术是一种秘密通信的手段,它通过隐藏秘密数据的存在性来获得秘密通信的安全。 ②信息隐藏技术的技术性能要求

蚁群算法

蚁群算法的改进与应用 摘要:蚁群算法是一种仿生优化算法,其本质是一个复杂的智能系统,它具有较强的鲁棒性、优良的分布式计算机制和易于与其他方法结合等优点。但是现在蚁群算法还是存在着缺点和不足,需要我们进一歩改进,如:搜索时间长、容易出现搜索停滞现象、数学基础还不完整。本文首先说明蚁群算法的基本思想,阐述了蚁群算法的原始模型及其特点,其次讨论如何利用遗传算法选取蚁群算法的参数,然后结合对边缘检测的蚁群算法具体实现过程进行研究分析,最后对本论文所做的工作进行全面总结,提出不足之处,并展望了今后要继续研究学习的工作内容。 关键词:蚁群算法;边缘检测;阈值;信息素;遗传算法; 1 前言 蚁群算法是近年来提出的一种群体智能仿生优化算法,是受到自然界中真实的蚂蚁群寻觅食物过程的启发而发现的。蚂蚁之所以能够找到蚁穴到食物之间的最短路径是因为它们的个体之间通过一种化学物质来传递信息,蚁群算法正是利用了真实蚁群的这种行为特征,解决了在离散系统中存在的一些寻优问题。该算法起源于意大利学者 Dorigo M 等人于 1991 年首先提出的一种基于种群寻优的启发式搜索算法,经观察发现,蚂蚁在寻找食物的过程中其自身能够将一种化学物质遗留在它们所经过的路径上,这种化学物质被学者们称为信息素。这种信息素能够沉积在路径表面,并且可以随着时间慢慢的挥发。在蚂蚁寻觅食物的过程中,蚂蚁会向着积累信息素多的方向移动,这样下去最终所有蚂蚁都会选择最短路径。该算法首先用于求解著名的旅行商问题(Traveling Salesman Problem,简称 TSP)并获得了较好的效果,随后该算法被用于求解组合优化、函数优化、系统辨识、机器人路径规划、数据挖掘、网络路由等问题。 尽管目前对 ACO 的研究刚刚起步,一些思想尚处于萌芽时期,但人们已隐隐约约认识到,人类诞生于大自然,解决问题的灵感似乎也应该来自大自然,因此越来越多人开始关注和研究 ACO,初步的研究结果已显示出该算法在求解复杂优化问题(特别是离散优化问题)方面的优越性。虽然 ACO 的严格理论基础尚未奠定,国内外的有关研究仍停留在实验探索阶段,但从当前的应用效果来看,这种自然生物的新型系统寻优思想无疑具有十分光明的前景。但该算法存在收敛速度慢且容易出现停滞现象的缺点,这是因为并不是所有的候选解都是最优解,而候选解却影响了蚂蚁的判断以及在蚂蚁群体中,单个蚂蚁的运动没有固定的规则,是随机的,蚂蚁与蚂蚁之间通过信息素来交换信息,但是对于较大规模的优化问题,这个信息传递和搜索过程比较繁琐,难以在较短的时间内找到一个最优的解。 由于依靠经验来选择蚁群参数存在复杂性和随机性,因此本文最后讨论如何利用遗传算法选取蚁群算法的参数。遗传算法得到的蚁群参数减少了人工选参的不确定性以及盲目性。 2 基本蚁群算法 2.1 蚁群算法基本原理 根据仿生学家的研究结果表明,单只蚂蚁不能找到从巢穴到食物源的最短路 径,而大量蚂蚁之间通过相互适应与协作组成的群体则可以,蚂蚁是没有视觉的,但是是通过蚂蚁在它经过的路径上留下一种彼此可以识别的物质,叫信息素,来相互传递信息,达到协作的。蚂蚁在搜索食物源的过程中,在所经过的路径上留下信息素,同时又可以感知并根据信息素的浓度来选择下一条路径,一条路径上的浓度越浓,蚂蚁选择该条路径的概率越大,并留下信息素使这条路径上的浓度加强,这样会有更多的蚂蚁选择次路径。相反,信息素浓度少的路

Warshall算法C语言实现

Warshall算法求传递闭包 例:A = { a, b, c, d ,e} , R 为A 上的关系, R = { ,,< a,e> ,< b,a> ,< b ,b> ,< b,d > ,< b e> , < c, a> , < c,b> ,< c,d> , , ,< d,d> ,< e,a> ,< e ,c>, } ,用Warshall 算法程序求R 的传递闭包. 解:R 的关系矩阵为 MR 10101 11011 10101 11010 10101???????????????? 运行Warshall算法程序运行结果截图: C语言源程序: #include #include void main( ) { int A[10][10] ; int n,i,j,k; printf("请输入关系矩阵的维数n(n<10)\n"); scanf("%d",&n); printf("输入n* n 个数据( 0 or 1)\n"); for(i=1;i<=n;i++)

{ for(j=1;j<=n;j++) { scanf("%d",&A[i][j]); if(A[i][j]!=1&&A[i][j]) printf("There is an error"); } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { for(k=1;k<=n;k++) { if(A[i][j]&&(A[i][k]||A[j][k])) A[i][k]=1; } } } printf("传递闭包的关系矩阵:\n"); for( i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%2d",A[i][j]); printf("\n"); } }

线性方程组的数值算法C语言实现(附代码)

线性方程组AX=B 的数值计算方法实验 一、 实验描述: 随着科学技术的发展,线性代数作为高等数学的一个重要组成部分, 在科学实践中得到广泛的应用。本实验的通过C 语言的算法设计以及编程,来实现高斯消元法、三角分解法和解线性方程组的迭代法(雅可比迭代法和高斯-赛德尔迭代法),对指定方程组进行求解。 二、 实验原理: 1、高斯消去法: 运用高斯消去法解方程组,通常会用到初等变换,以此来得到与原系数矩阵等价的系数矩阵,达到消元的目的。初等变换有三种:(a)、(交换变换)对调方程组两行;(b)、用非零常数乘以方程组的某一行;(c)、将方程组的某一行乘以一个非零常数,再加到另一行。 通常利用(c),即用一个方程乘以一个常数,再减去另一个方程来置换另一个方程。在方程组的增广矩阵中用类似的变换,可以化简系数矩阵,求出其中一个解,然后利用回代法,就可以解出所有的解。 2、选主元: 若在解方程组过程中,系数矩阵上的对角元素为零的话,会导致解出的结果不正确。所以在解方程组过程中要避免此种情况的出现,这就需要选择行的判定条件。经过行变换,使矩阵对角元素均不为零。这个过程称为选主元。选主元分平凡选主元和偏序选主元两种。平凡选主元: 如果()0p pp a ≠,不交换行;如果()0p pp a =,寻找第p 行下满足() 0p pp a ≠的第一 行,设行数为k ,然后交换第k 行和第p 行。这样新主元就是非零主元。偏序选主元:为了减小误差的传播,偏序选主元策略首先检查位于主对角线或主对角线下方第p 列的所有元素,确定行k ,它的元素绝对值最大。然后如果k p >,则交换第k 行和第p 行。通常用偏序选主元,可以减小计算误差。 3、三角分解法: 由于求解上三角或下三角线性方程组很容易所以在解线性方程组时,可将系数矩阵分解为下三角矩阵和上三角矩阵。其中下三角矩阵的主对角线为1,上三角矩阵的对角线元素非零。有如下定理: 如果非奇异矩阵A 可表示为下三角矩阵L 和上三角矩阵U 的乘积: A LU = (1) 则A 存在一个三角分解。而且,L 的对角线元素为1,U 的对角线元素非零。得到L 和U 后,可通过以下步骤得到X : (1)、利用前向替换法对方程组LY B =求解Y 。 (2)、利用回代法对方程组UX Y =求解X 。 4、雅可比迭代:

0计算方法及MATLAB实现简明讲义课件PPS8-1欧拉龙格法

第8章 常微分方程初值问题数值解法 8.1 引言 8.2 欧拉方法 8.3 龙格-库塔方法 8.4 单步法的收敛性与稳定性 8.5 线性多步法

8.1 引 言 考虑一阶常微分方程的初值问题 00(,),[,],(). y f x y x a b y x y '=∈=(1.1) (1.2) 如果存在实数 ,使得 121212(,)(,).,R f x y f x y L y y y y -≤-?∈(1.3) 则称 关于 满足李普希茨(Lipschitz )条件, 称为 的李普希茨常数(简称Lips.常数). 0>L f y L f (参阅教材386页)

计算方法及MATLAB 实现 所谓数值解法,就是寻求解 在一系列离散节点 )(x y <<<<<+121n n x x x x 上的近似值 . ,,,,,121+n n y y y y 相邻两个节点的间距 称为步长. n n n x x h -=+1 如不特别说明,总是假定 为定数, ),2,1( ==i h h i 这时节点为 . ) ,2,1,0(0 =+=i nh x x n 初值问题(1.1),(1.2)的数值解法的基本特点是采取 “步进式”. 即求解过程顺着节点排列的次序一步一步地向前推进. 00(,),[,], (). y f x y x a b y x y '=∈=

描述这类算法,只要给出用已知信息 ,,,21--n n n y y y 计算 的递推公式. 1+n y 一类是计算 时只用到前一点的值 ,称为单步法. 1+n y n y 另一类是用到 前面 点的值 , 1+n y k 11,,,+--k n n n y y y 称为 步法. k 其次,要研究公式的局部截断误差和阶,数值解 与 精确解 的误差估计及收敛性,还有递推公式的计算 稳定性等问题. n y )(n x y 首先对方程 离散化,建立求数值解的递推 公式. ),(y x f y ='

常用数学算法C语言实现

一、基本算法 1.交换(两量交换借助第三者) 例1、任意读入两个整数,将二者的值交换后输出。 main() {int a,b,t; scanf("%d%d",&a,&b); printf("%d,%d\n",a,b); t=a; a=b; b=t; printf("%d,%d\n",a,b);} 【解析】程序中加粗部分为算法的核心,如同交换两个杯子里的饮料,必须借助第三个空杯子。 假设输入的值分别为3、7,则第一行输出为3,7;第二行输出为7,3。 其中t为中间变量,起到“空杯子”的作用。 注意:三句赋值语句赋值号左右的各量之间的关系! 【应用】 例2、任意读入三个整数,然后按从小到大的顺序输出。 main() {int a,b,c,t; scanf("%d%d%d",&a,&b,&c); /*以下两个if语句使得a中存放的数最小*/ if(a>b){ t=a; a=b; b=t; } if(a>c){ t=a; a=c; c=t; } /*以下if语句使得b中存放的数次小*/ if(b>c) { t=b; b=c; c=t; } printf("%d,%d,%d\n",a,b,c);} 2.累加 累加算法的要领是形如“s=s+A”的累加式,此式必须出现在循环中才能被反复执行,从而实现累加功能。“A”通常是有规律变化的表达式,s在进入循环前必须获得合适的初值,通常为0。例1、求1+2+3+……+100的和。 main() {int i,s; s=0; i=1; while(i<=100) {s=s+i; /*累加式*/ i=i+1; /*特殊的累加式*/ } printf("1+2+3+...+100=%d\n",s);} 【解析】程序中加粗部分为累加式的典型形式,赋值号左右都出现的变量称为累加器,其中“i = i + 1”为特殊的累加式,每次累加的值为1,这样的累加器又称为计数器。

基于Matlab的LSB信息隐藏技术

摘要 随着科技的发展,信息安全技术已经成为不可忽略的因素。而网络的普及及应用,让多媒体技术得到了广泛的发展,因此图像及视频的安全变得越来越重要。本文正是在这种时代背景下,介绍一种关于图像处理的信息隐藏技术。 用于进行隐蔽通信的图像信息隐藏算法可以分为两大类:基于空域的信息隐藏算法和基于变换域的信息隐藏算法。基于空域信息隐藏算法中的典型算法是LSB算法,该算法的主要特点是在载体图像中嵌入的隐藏信息数据量大,但是嵌入位置固定,安全性差,嵌入的隐藏信息易被破坏,鲁棒性不高;基于变换域信息隐藏算法中的典型算法是离散余弦变换域的信息隐藏算法,该算法嵌入信息能够抵御多种攻击,具有较好的鲁棒性,并且嵌入方式多种多样,增加了攻击者提取的难度,具有一定的安全性,但是该类算法嵌入的隐藏信息数据量较小,不适合于进行大数据量的隐蔽通信。 下面对LSB算法原理及LSB算法实现进行了介绍,最后使用MATLAB 对其隐藏过程进行了仿真。 [关键词]信息安全隐藏嵌入信息 I

目录 一、设计要求 (3) 二、设计的目的 (3) 三、设计的具体实现 (3) 3.1 信息隐藏及时空域信息隐藏概述 (3) 3.2 LSB上的信息隐秘 (4) 3.2.1 LSB上信息隐秘的原理 (4) 3.2.2 LSB上的信息隐秘的过程 (5) 3.3运用LSB实现秘密消息的隐藏 (6) 3.4运用LSB实现秘密消息的差异对比 (9) 3.5运用LSB实现秘密消息的提取 (12) 3.6信息隐藏的拓展 (15) 四、心得体会 (16) 五、参考文献 (16)

一、设计要求 1.复习《信息安全技术导论》中有关LSB的相关知识。 2.对其算法进行详细研究与理论分析。 3.利用MATLAB编写程序并仿真结果。 4.设计报告中应包括具体设计原理、设计的详细说明书以 及最终结果。 二、设计的目的 1.了解并掌握LSB信息隐藏和提取的方法,具备初步的独 立分析和设计能力; 2.提高综合应用所学的理论知识和方法独立分析和解决问 题的能力; 3.训练用MATLAB软件编写程序并仿真。 三、设计的具体实现 3.1 信息隐藏及时空域信息隐藏概述 信息隐藏技术主要由下述两部分组成: (1)信息嵌入算法,它利用密钥来实现秘密信息的隐藏。 (2)隐蔽信息检测/提取算法(检测器),它利用密钥从隐蔽载体中检测/恢复出秘密信息。在密钥未知的前提下,第三者很难从隐秘载体中得到或删除,甚至发现秘密信息。 空域隐藏技术是指将秘密信息嵌入数字图像的空间域中,即对像素灰度值进行修改以隐藏秘密信息。 时空域信息隐藏分为:LSB与MSB,LSB对应的中文意思是:最不重要位,有时也称为最低有效位或简称最低位。MSB,

相关文档