优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

028_信息加密与隐藏工具(VB.NET)

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

4 实现一个信息加密与隐藏工具
4.1 设计思路
4.1.1 界面设计思路
本设计根据前面理论的分析,从信息加密与隐藏两个主要方面着手,将两大块分开进行独立设计,做成不同的功能界面,每部分功能又都分别包括了对文本文件和图片文件的操作。
为了方便操作与演示,因此在界面设计上不用很复杂,只需要用有限的几个控件来实现不同的功能,通过某个控件选择不同的文件,再通过相应的按钮对所选文件进行不同操作。
4.1.2 信息加密设计思路
在实现对文本文件的加密与解密时,将文件内容固定为非中文字符,即常用的ASCII字符,并采用对称加密算法来实现,算法选择用自己编写的简单的位操作算法,且将密钥固定为已知值。
4.1.3 信息隐藏设计思路
在实现对图片文件的信息隐藏与提取时,采用基于数字水印的技术,图片格式固定为.BMP格式的文件,隐藏的过程就是通过在所选的图片中嵌入其他的图片,并在图片中加入特殊的信息,而验证的过程就是对图片中的特殊信息进行提取,如果包含有特殊信息,则说明已对文件进行信息隐藏,验证成功后将隐藏在载体文件中的图片信息显示出来。
4.2 设计流程
4.2.1 信息加密流程
文本文件的内容是由可见ASCII字符组成,每个ASCII字符都有对应的字符值,在对其进行加密时,可采用对称加密算法,对每个字符值进行某一范围内的规律变换,变换后字符显示会与原先的字符不一样,如此循环的对每个字符进行相同操作,就可将明文信息变换成密文信息,最后将密文信息附加到明文信息结尾部分,生成一个新的文本文件,接着再次将整个文本文件进行加密,为的是在信息的传输中,保护信息。 内容来自think58

[来源:http://www.think58.com]

详细的步骤如下:
1.选择所要加密的文本文件;
2.用对称加密算法对文本文件进行加密,生成附加信息;
3.将已经生成的附加信息添加到原明文文件后,重新生成一个新的文本文件;
4.再次对新的文本文件进行加密;
5.将整个加密文件保存保存;
4.2.2 信息隐藏流程
本设计中的信息隐藏主要是针对图片文件,即在一张图片中隐藏另外一张图片信息,图片文件的格式为.BMP格式,图片文件的度量单位是由像素点构成,许多不同颜色值的像素点组合在一起就可以构成一张图片,在对图片文件进行操作时就是以像素点为基本单位进行操作,将图片信息隐藏在像素点中,像素点是由8位二进制值组成,只要将信息隐藏到二进制中就可以,最后为了使验证方便,在对前几个像素点的值进行规律变化,而对整张图片的显示无大的影响。
详细的步骤如下:
1.选择所要隐藏的图片文件;
2.提取每个像素点的信息值;
3.获取信息图片的像素点信息值,并将其隐藏的载体图片中;
4.生成新的图片,将前几个像素点进行变换;
5.保存整个图片文件;
4.2.3 信息解密流程
加密后的文本文件是由两部分组成的,一是原明文信息,二是消息摘要,并且两部分组合在一起加密后构成加密文件,在进行解密时,需要将两部现分开,这就先要解密,由于消息摘要的长度和明文信息的长度是相同的,这就便于提取,之后将获取到的明文信息值用相同的加密算法进行加密,加密后的信息于消息摘要进行比较,如果相同,则说明解密成功。 本文来自think58 [资料来源:http://think58.com]
详细的步骤如下:
1.选择所要解密的文本文件;
2.对文件解密,从中提取明文信息和附加信息;
3.对明文信息加密,得到另一附加信息;
4.将两个附加信息进行比较;
5.相同,则说明信息在传输中没有被改变,否则不然;
4.2.4 隐藏信息提取流程
对图片文件的信息提取如同对其进行隐藏一样,只需要涉及到对像素点值的操作,首先要对图片的前几个像素点进行提取,验证其是否按照隐藏时的规律排列,如是,则说明有隐藏信息,接着,将隐藏到载体图片像素点中的信息通过位操作变换出来,使其为显示图片的像素点。
详细步骤如下:
1.选择所要提取隐藏信息的图片文件;
2.提取前几个像素点,验证其是否按照隐藏规律排列;
3.验证成功时,变换图片的每个像素点值;
4.将隐藏的图片信息显示出来;
4.3 设计前言
4.3.1 设计工具
本次设计采用的是微软的.NET 2003开发平台,用VB.NET语言进行设计,由于VB.NET是可视化的开发工具,且又是面向对象的语言,对于界面的设计相当方便和上手,而且语言中封装的函数可提供所需的功能作用,使得本次设计在程序结构上清晰而且规范。
4.3.2 已有设计条件
首先对VB.NET有系统的学习过,熟悉其语法规则,了解该程序语言的特点,在平时的学习中,曾经设计过简单的应用软件,具有一定的开发经验,因此,在本次毕业设计中,能够按照规范的软件设计流程,参照已有知识,根据要求设计出符合目标的成果出来。

copyright think58 [资料来源:http://think58.com]


另外,在设计中,对存在的问题,可在指导老师的指点下,对问题进行分析,并且提出可行的解决方案,及时修改程序的问题,对程序进行测试,尽可能的完善本设计。
4.3.3 设计目的
本文描述了一个信息加密与隐藏工具的设计和实现,先从理论上进行总体阐述,接着对功能的实现进行具体的分析和设计,从安全性的角度来说,本设计成果不适合用于实际生活中,但从教学的角度来考虑,通过课堂上的演示,可使学生更好理解这方面的知识原理,增强教学效果。
4.4 信息加密与隐藏设计过程分析
4.4.1 信息加密
本功能的设计是用对称加密算法件来实现对文本文件的加密,文本文件是指TXT格式的文件,由于算法上的限制,文件的内容除去了中文字符,操作的是ASCII字符,每个字符只占用一个字节的空间,这样便于处理。
首先,选择文件格式,并选择所操作的文件,相应的代码实现如下:
OpenFileDialog1.Filter = "所有文件(*.*)|*.*|文本文件(*.text)|(*.text)"
Result = OpenFileDialog1.ShowDialog()
If Result = DialogResult.OK And Len (OpenFileDialog1.FileName) > 0 Then
TextBox1.Text = OpenFileDialog1.FileName
str = TextBox1.Text 本文来自think58
[版权所有:http://think58.com]

If RadioButton1.Checked = True Then
RichTextBox1.Enabled = True
RichTextBox1.Visible = True
PictureBox2.Visible = False
GroupBox3.Text = "文本"
FileOpen (1,str,OpenMode.Input)
text = LineInput (1)
PictureBox1.Visible = False
RichTextBox1.Text = text
mstr = text
FileClose (1)
ElseIf RadioButton2.Checked = True Then
RichTextBox1.Visible = False
GroupBox3.Text = "隐藏图片"
PictureBox2.Visible = True
PictureBox1.Visible = True
RichTextBox1.Text = ""
RichTextBox1.Enabled = False
PictureBox1.Image = Image.FromFile (str)
Else : MsgBox("请选择文件格式")
End If
End If
文件选定后,文件的内容就可以一通过LineInput()函数提取出来并显示到控见上,然后再惦记加密按扭,实现对文件的加密,这个过程包括了生成消息文摘,并将消息文摘附加到原文件之后,组成一个新的文件,为了不让外界看到文件的具体内容,必须对新组合的文件再进行依次加密。工作完成之后,系统会提示用户进行接下来的操作。 think58.com [资料来源:www.THINK58.com]
加密时用的加密算法与生成消息摘要的算法使用同一算法,在使用算法之前,为了是字符变换之后不超出可视ASCII字符集,首先要定义几个数值,用于恢复,如下:
Const MIN_ASC = 32 ' Space.
Const MAX_ASC = 126 ' ~.
Const NUM_ASC = MAX_ASC - MIN_ASC + 1
加密算法主要实现代码为:
Public Function strEncrypt(ByVal from_text As String,ByVal password As String) As String
Dim i As Integer
Dim ch As Integer
offset = NumericPassword(password)
Rnd(-1)
Randomize(offset)
str_len = Len(from_text)
For i = 1 To str_len
ch = Asc(Mid$(from_text,i,1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch-MIN_ASC
Offset = Int ((NUM_ASC +1) * Rnd ())
ch = ((ch + offset) Mod NUM_ASC)
ch = ch + MIN_ASC
strEncrypt = strEncrypt & Chr (ch)
End If
Next i
End Function
Public Function NumericPassword (ByVal password As String) As Long
Dim value As Long
Dim ch As Long
Dim shift1 As Long
str_len = Len(password) think58好,好think58

[资料来源:www.THINK58.com]


For i = 1 To str_len
ch = Asc(Mid$(password,i,1))
value = value Xor (ch * 2 ^ shift1)
value = value Xor (ch * 2 ^ shift2)
shift1 = (shift1 + 7) Mod 19
shift2 = (shift2 + 13) Mod 23
Next i
NumericPassword = value
End Function
在以上的算法中用到了随即生成位移量值的函数NumericPassword()。
其中password为程序中指定的密钥“123456”。
经过上述运算之后,生成加密文件,它的内容会显示在控件中,此时的内容在外界看来是无法获取到真实内容的,而且文件的长度是原明文文件长度的两倍,因为该算法只是改变字符的ASCII值,并不会增加文件的长度。
为了在解密验证时使用,必须将加密文件的内容保存下来,点击保存按扭,文件回保存到默认的盘符下。
加密算法的流程如下图1: 本文来自think58
[版权所有:http://think58.com]

think58.com [资料来源:THINK58.com]

copyright think58

[资料来源:THINK58.com]

[来源:http://think58.com]

[来源:http://think58.com]

think58 [来源:http://www.think58.com]


图1 文本信息加密过程
上述对文本文件加密时,用的是对称加密算法,而实际中多用的是非对称加密算法,用发送方的公钥进行加密,验证解密时用的是私钥,这样做安全性会更高,且实际应用价值更广。
4.4.2 信息隐藏
图片文件由于不同于文本文件,对其进行信息隐藏可参考数字水印技术,数字水印(Digital Watermark)技术是将与多媒体内容相关或不相关的一些标示信息直接嵌入多媒体内容当中,但不影响原内容的使用价值,并不容易被人的知觉系统觉察或注意到。通过这些隐藏在多媒体内容中的信息,可以达到确认内容创建者,或者是否真实完整。
基于数字水印的这种特性,可以很好的将其应用到对图片的信息隐藏中,因为对图片的处理是将信息图片的内容隐藏到载体图片中,而且图片的内容又是由像素点构成,图片的信息隐藏技术可以用像素来隐藏信息。
图片文件有不同的格式,在这里只研究Bmp格式的文件,Bmp是Windows位图,它可用于任何颜色深度(从黑白到24位颜色),图片内容是保存在被称为象素的单位中,象素中包含有三种颜色值,分别是红(R),绿(G),蓝(B),三种颜色值的不同组合可形成不同的颜色,每种颜色值占一个字节,即8位二进制位。
根据二进制到十进制的转换规则,高位值代表的十进制数比低位值要大,因此可以将颜色值的每位二进制位划分为不同的位平面,越高位对图片的显示效果影响越大,而较低位的变化影响较小。 copyright think58 [资料来源:http://think58.com]
上述特点说明图片颜色值的高位在效果显示上贡献最大,低几位的变化对显示效果的影响从肉眼上很难分辨出来。因此,在对图片处理时,可以将得数信息隐藏在图片象素的低几位中,经过实验,可取4位值来隐藏信息位。
现将图片信息隐藏算法如下设计:
假设原载体图片和隐藏图片的尺寸的大小相同;
P1(x,y)表示为原载体图像象素点;
P2(x,y)表示为相应载体图像位置的隐藏图像象素点;
P3(x,y)表示为添加了隐藏信息后相对应载体图像位置的图像象素点;
x,y是逻辑坐标系中的坐标轴,单位是象素;
为了将信息隐藏在图片中,需对相同位置的象素点进行位操作,由于只能存取4位信息,则应当将隐藏图片的高4位隐藏在载体图片的低4位中,这样既不会影响显示效果,有可以在验证时将隐藏图片显示出来。
首先,将P1(x,y)的低4位清空,这样做是为了不影响隐藏图片的象素值,其次,应将P2(x,y)的高4位移动到低4位,使得原来的高4位清空。

本文来自think58 [资料来源:http://THINK58.com]

[资料来源:THINK58.com]

think58

[资料来源:http://THINK58.com]

[资料来源:http://think58.com]

think58好,好think58 [资料来源:http://www.THINK58.com]

[资料来源:http://think58.com]

[资料来源:www.THINK58.com]

内容来自think58

[资料来源:THINK58.com]


图2 图片信息隐藏过程
如图2所示,P1(x,y),P2(x,y),P3(x,y)的运算关系如下:
P3(x,y)=(P1(x,y)&11110000)||(P2(x,y)>>4)
图片象素点的排列类似于矩阵的格式,如图3:

[资料来源:http://www.THINK58.com]

think58好,好think58 [版权所有:http://think58.com]

内容来自think58 [来源:http://www.think58.com]

[版权所有:http://think58.com]

think58好,好think58 [来源:http://think58.com]

[资料来源:THINK58.com]





图3 像素排列矩阵
因此,必须在一个循环体中从左到右,从上至下,对每个象素点,从P1(x,y)到 Pn(x,y)进行上述位运算操作。
经过以上步骤之后,图片信息已经隐藏在载体图片之中,P1(x,y)值已经变为P3(x,y),但为了是验证时成功,还必须在P3(x,y)中取几个象素点,来存放一些特殊的信息,用于验证,在这里,取前8个象素点,并在每个象素点的低四位中按顺序存放0至7这八个数字信息,这样虽然改变了原来的低四位值,但只是有限的几个象素点被改变,所以并不会影响显示效果。具体的实现如下:
P(x,y)= (P(x,y)&11110000)|| I (I是从0到7的十进制数字)
详细算法为:
Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button2.Click
If RadioButton2.Checked = True Then
x = PictureBox1.Image.Width
y = PictureBox1.Image.Height
pic1 = Me.PictureBox1.Image
pic2 = Me.PictureBox2.Image
For j = 0 To x -1
For i = 0 To y -1
c1 = pic1.GetPixel (j,i)
c2 = pic2.GetPixel (j,i)
a = c1.A
rr = CInt((CByte(c1.R) And CByte(240)) Or CByte(c2.R) >> 4) 本文来自think58 [资料来源:http://THINK58.com]
gg = CInt((CByte(c1.G) And CByte(240)) Or CByte(c2.G) >> 4)
bb = CInt((CByte(c1.B) And CByte(240)) Or CByte(c2.B) >> 4)
If rr < 0 Then rr = 0
If rr > 255 Then rr = 255
If gg < 0 Then gg = 0
If gg > 255 Then gg = 255
If bb < 0 Then bb = 0
If bb > 255 Then bb = 255
c1 = c1.FromArgb (a,rr,gg,bb)
pic1.SetPixel (j,i,c1)
Next
PictureBox1.Refresh ()
Next
For j = 0 To 7
c1 = pic1.GetPixel (j,0)
a = c1.A
rr = CInt((CByte(c1.R) And CByte(240)) Or CByte(j + 1))
gg = CInt((CByte(c1.G) And CByte(240)) Or CByte(j + 1))
bb = CInt((CByte(c1.B) And CByte(240)) Or CByte(j + 1))
c1 = c1.FromArgb (a,rr,gg,bb)
pic1.SetPixel (j,0,c1)
Next
MsgBox("图片信息隐藏成功")
End If
If RadioButton1.Checked = True Then
RichTextBox1.Text = strEncrypt (RichTextBox1.Text,"123456")
MsgBox("文本加密成功")
End If [资料来源:http://THINK58.com]
End Sub
在这之后,就已经完成了对图片的信息隐藏工作。
4.5 解密与隐藏信息提取设计过程分析
4.5.1 文本信息的解密
在完成对文本文件的加密后,加密文件被保存下来,由于该文件是由原文件明文信息和Hash信息附加到尾部组合成,因此文件的长度是明文的两倍,当验证的时候,需要将两部分信息分开,并分别对两部分信息进行相应的操作。
首先,由于整个加密文件已经加过密,应通过DeStrEncrypt()进行一次解密,因为是对称加密算法,密钥与加密时相同,都是“123456”,解密过程与加密过程进行相反操作,加密时需要对每个字符加一个位移量,则在解密时需要减去同样减去相同的位移量,该位移量同样是由函数Numeric Password()计算获得。
关键性代码为:
For i = 1 To str_len
ch = Asc(Mid$(from. text,i,1))
If ch >= MIN_ASC And ch <= MAX_ASC Then
ch = ch - MIN_ASC
offset = Int((NUM_ASC + 1) * Rnd)
ch = ((ch - offset) Mod NUM_ASC)
If ch < 0 Then ch = ch + NUM_ASC
ch = ch + MIN_ASC
DeStrEncrypt = DeStrEncrypt & Chr$(ch)
End If
Next i
主要计算公式如下: think58.com

[资料来源:http://think58.com]

ch = ((ch - offset) Mod NUM_ASC)
当ch进行如上操作时,可能回超出规定的ASCII字符的范围,因此需要加如下的条件:
If ch < 0 Then ch = ch + NUM_ASC
当超出范围时,通过加一个NUM_ASC使其处在规定的ASCII字符的范围内,此时,经过该步骤之后,获得了解密后的加密文件,假设表示为Msg1,它由明文MsgA和消息摘要MsgB组成,它们之间的关系如下:
Msg1=MsgA+ MsgB
分离之后,用消息摘要算法对MsgA进行同样运算,可得到另一个消息摘要MsgB’,运算关系如下:
MsgB’= strEncrypt (MsgA,"123456")
运算之后,将MsgB与MsgB’进行比较,当两者完全相同时,则说明验证成功,否则会提示文件非法。
主要代码为:
If RadioButton1.Checked = True Then
strtemp1 = DeStrEncrypt (RichTextBox1.Text,"123456")
str = strtemp1.Substring(halflen,halflen)
strtemp2 = strtemp1.Substring (0,halflen)
strtemp2 = DeStrEncrypt (strtemp2,"123456")
If String.Compare (str,strtemp2) = 0 Then
RichTextBox1.Text = strtemp2
MsgBox("验证成功!") copyright think58

[来源:http://think58.com]


Else If String.Compare (str,strtemp2) <> 0 Then
MsgBox("非法文件,来源不明!")
End If
End If
详细流程如图4: [资料来源:www.THINK58.com]

内容来自think58 [来源:http://www.think58.com]

copyright think58 [资料来源:THINK58.com]

[资料来源:www.THINK58.com]

[资料来源:http://think58.com]



图4解密过程

copyright think58

[资料来源:http://think58.com]

[资料来源:THINK58.com]