论文部分内容阅读
摘要:计算机网络中传输的信息涉及政府、军事、经济、文教等诸多领域,其中很多是敏感信息甚至是国家机密,所以难免会吸引夹自世界各地的“黑客”及各种病毒的攻击。这除了计算机网络固有的设计缺陷外,很多是因为计算机语言本身的安全漏洞或用户的不正当使用造成的。为此,本文首先讨论了登录口令的设置和处理,接着阐述了网络数据加密解密,最后分析了代理(Agent) 的实现。因此本文具有深刻的理论意义和广泛的实际应用。
关键词:VB程序设计;网络安全;数据加密;代理
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)12-21592-02
Programming of Visual Basic Apply in the Network
ZENG Yuan-mei
(School of Dongguan University of Science and Technology Yecurity)
Abstract:Computer network transmit information relate to the government、military affairs、economy、culture and education and so on, in this information has many sensitivity information including the nation secret, so hacker and many of sorts virus attack this information. Besides of the design bug of the computer network, a large number of is the security leak and malfeasance use of the computer language.So, in this paper,firstly discussed the log password,then expatiated network data encrypt,finally analysis the implement of the Agent. It has deeply signification in theory and extensive value in applications.
Key words:programming of visual basic; network security; data encrypt; Agent
1 引言
Visual Basic (简称VB) 程序设计语言是创建于Windows 95 开发环境下具有图形用户界面应用程序的迅速简单的程序语言系统,使用它可以完成各种软件设计,因此自1991 年問世以来,就深受Windows开发者的喜爱,得到了迅速推广,是目前应用最广泛的程序设计语言之一。
计算机网络变得日益重要, 事实上已经成为政府、军队、商业领域不可缺少的部分。随着技术的发展, 网络的规模更加庞大, 结构更加复杂, 支持的用户更多,提供更多的服务, 同时也对如何保证网络的正常运行、网络硬件及信息的安全、充分发挥各种网络设备的性能等方面提出了更高的要求。
2 登录口令的设置和处理
密码术是把可懂的文本变成不可懂的形式,以及通过其逆过程把不可懂的文本还原成原来文本的方法和技术。把可懂的文本变换成不可懂的形式的过程,称为加密,其逆过程,即把不可懂的文本还原成可懂的文本的过程,称为脱密或解密。原来的可懂文本称为明文,而变换为不可懂形式的文本称为密文。完成加密解密的算法称为密码体制。
一种密码算法,可以实现两种类型的保密:理论保密和实际保密。理论保密基于这样的原则: 敌手所能获得的或接收到的信息总不足以推导出一个密文的唯一解。也就是说, 不管利用何种分析方法,对于可能的值, 则始终存在着某种程度的不确定性。实际上, 这是不可能达到的, 如果敌手能够获得足够数量的明文和与其相对应的密文, 那么, 是可以唯一地达到其密钥的。实际上保密是建立在这样的一种假设上, 即可以获得足够的信息来破译密码, 并且这一工作可以通过求解一个给定的密码分析问题所需的工作量(即工作因子) 来衡量。这类的保密可以这样来实现: 设计一种密码算法,使得即使在分析者具有特定的算法知识, 并已获得大量的密文/对应的明文或者获得明文/对应的密文的情况下, 要求解报文或密钥, 在计算上是不可行的。
从密钥方式来分, 密码体制有两类: 传统密码和公开密钥密码。传统密码是指加密密钥与解密密钥相同的密码。公开密钥密码则是指加密密钥与解密密钥不相同, 其中加密密钥是公开的密码。
开发JDS时, 采用的是传统密码方法,将明文的ASCII 码作一些调整而得到密文的ASCII码, 这样就能实现对明文的加密。具体做法如下:
(1)对明文的第一个字符进行移位, 移位数为所有明文的ASCII 码的和;
(2)对明文的以后各位进行移位, 移位数为前一位明文的ASCII 码加上所有明文的ASCII 码的和;
(3)如果移位后的ASCII 码超出范围[33 ,126] , 则通过取余运算变换到上述范围;
(4)将密文以ASCII 码链的方式存储在数据库中。
例如, 假设明文为“njhgdx”, 则通过这种算法变为: “{tkaT [”。这种对明文加密的方法的特点是对不同的明文各位移位数是不同的, 从而给解密增加难度。
上述过程用VB6. 0 实现如下(假设明文的最大长度为8):
Public Function passHide (myPassWord As String) As String ′口令加密函数
Dim I As Integer
Dim tempPass1 (8) As Integer ′明文的各位字符的ASCII 码
Dim tempPass2 (8) As String ′密文的各位字符
Dim tempAsc As Integer ′临时ASCII 码
Dim temPass As String ′密文
Dim allLength As Integer ′各位明文的ASCII 码总和
temPass = ″″: allLength = 0
For I = 0 To Len (Trim (myPassWord) ) - 1
tempPass1 ( I) = Asc (Mid ( Trim (myPassWord) , I + 1 , 1) ) ′将明文转换为ASCII 码
allLength = allLength + tempPass1 ( I)
Next I
For I = 0 To Len (Trim (myPassWord) ) - 1
If I > 0 Then
tempPass1 ( I) = tempPass1 ( I) + tempPass1 ( I - 1) + allLength Else
tempPass1 ( I) = tempPass1 ( I) + allLength
End If
tempAsc = tempPass1 ( I) Mod 126
If tempAsc < 33 Then
tempAsc = tempAsc + 33
End If
tempPass 2 ( I) = Chr (tempAsc) ′將密文的ASCII 码对126 取余, 并转化为字符形式
Next I
For I = 0 To Len (Trim (myPassWord) ) - 1
temPass = temPass + tempPass2 ( I)
Next I
passHide = temPass
End Function
当然,上述口令加密的方式只是一种较为粗糙的方法,但对一般的系统而言,则不失为一种有效的数据加密方法,即使能从数据库中获得密文, 也知道加密算法, 却不能轻易获得明文,从而达到在一定程度上对口令的保护。
在JDS 中没有解密算法,在进行口令认证时,只要将输入的口令通过加密算法变成密文的形式,再对照数据库中存储的密文是否与该密文一致即可。
3 网络数据加密解密
在VB.NET可利用CroptoStream流中DESCryptoServiceProvider类的CreateEncryptor进行力加密,CreateDecryptor解密,然后通过MemoryStream流完成数据转换。
加密函数是通过CryptoStream流将末加密文本,通过CreateEncrypto方法加密到MemoryStream流中,再转换输出加密后的数据,代码如下:
Public Function EncryptData(ByVal Value Its String,
ByVal desKey() As Byte, ByVal desIV() As Byte)
Dim ms As New MemoryStream()
Dim byt() As Byte
Dim bin(4096) As Byte'这是加密的中间存储器
Dim rdlen As Long = 8'这是写的字节的总数。
Dim len As Integer'这是被次写的字节的数量。
Dim des As New DESCryptoServiceProvider()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write)
byt=Encoding. UTF 8.GetBytes(Value)
cs. Write(byt,0, byt.Length)
cs.FlushFinalBlock()
cs.Close()
Return Convert.ToBase64String(ms.ToArray})
End Function
解密函数是通过CryptoStream流将加密数据,通过CreateDecryptor方法解密到MemoryStream流中,再转换输出解密后的数据,代码如下:
PublicFunction deEncryptData(ByValValueAs
String, ByVal desKey() As Byte, ByVal desIV() As Byte)
Dim ms As New MemoryStream()
Dim byt() As Byte
Dim bin(4096) As Byte
Dim rdlen As Long=8
Dim len As Integer
Dim des As New DESCryptoServiceProvider()
Dim cs As New CryptoStream(ms, des.CreateDecayptor(desKey, desIV), CryptoStreamMode.Write)
byt=Convert.FromBase64String(Value)
cs. Write(byt,0, byt.Length)
cs.FlushFinalBlock()
cs.Close()
Return Encoding.UTF8.GetString(ms.ToArray())
End Function
4 代理(Agent) 的实现
代理端程序在被管理设备上运行, 其主要功能是:
(1)访问MIB 数据库, 显示设备的状态信息;
(2)在管理器读取时将状态信息送到管理器端口;
(3)响应管理器命令, 修改某些对象的值;
(4)发送陷入报文。
代理程序启动时生成代理实例Agent1, 加载SMI和MIB 库及TRAPS 库, 实现程序如下:
Private Agent1 As New Agent
Private Sub LoadMibs ()
Agent1?M ib?Load " smi?mib" //代理装载SM I 库
Agent1?Mib?Load "mib_ ii?m ib" //代理装载M IB 库
Agent1?Mib?Load " trap?mib" //代理装载TRA PS库
Dim MibList As New DartSt rings
MibL ist?Add " smi?mib"
MibL ist?Add "mib_ ii?mib"
MibL ist?Add " t raps?mib"
Agent?Mib?CompileM ibList
End Sub
库文件装载成功后, 代理从MIB中获取并显示被管理对象必要的信息, 程序如下:
Private Sub SetMibsAndLabels ()
Set vsysDescr = A gent1?M ib?Variables (" sysDescr" )
vsysDescr?value = sysDescr?Text
//从M IB 中获取sysDescr 值
Set vsysObject ID = Agent1?Mib?Variables (" sysObject ID" )
vsysObject ID?value = sysObject ID?Text
//从M IB 中获取sysO bject ID 值
…
Set vsysUpTime = Agent1?Mib?Variables (" sysUpTime" )
vsysUpTime?value = GetTickCount - gTickCountRef
//计算出sysUpTime 值
Set vtcpOutSegs = A gent1?Mib?Variables (" tcpOutSegs" ) vtcpOutSegs?1value = tcpOutSegs?Text
//从M IB 中获取tcpO utSegs 值
End Sub
在代理端與管理器之间的互动中, 代理端主要是被动地响应管理器的命令, 各种复杂的工作都由管理器来完成。代理只是在收到管理器端的命令之后, 才通过Agent来完成修改操作。
代理对M IB 数据库的访问功能编码如下:
SetvsysUpTime = A ent1?Mib?Variables (" sysUpTime" )
vsysUpTime?value = GetTickCount-gTickCountRef
If (Agent1?Message?Type= snmpSet1) Or
(Agent1?Message?Type= snmpSet2) Then SetReq= T rue
If (Agent1?Message?Type= snmpGetNext1)Or
(Agent1?Message?Type = snmpGetNext2) Then i= 1
Agent1?Message?Type = snmpResponse1
5 总结
随着WWW技术越来越成熟,Java、CGI、Active X之类的网络新技术给用户带来了五彩缤纷的和便利的界面,同时也给“黑客”提供了攻击的新手段。这些新技术往往是通过一种新语言或者某种语言的扩展来实现的。因此,了解VB程序设计在网络安全中的应用,对设计完善的网络软件及防止网络攻击尤为重要。
参考文献:
[1]雷军程,柳小文, 许鞍铭.用vb实现Microsoft CryptoAPI加密[J].邵阳学院学报(自然科学版),2005,(01)
[2]常晓荣,王磊. 使用CSP开发通用的加密功能[J].西安文理学院学报(自然科学版),2005,(02).
[3]姚世军.陈楚香.用CryptoAPI生成密钥的方法[J].河南教育学院学报(自然科学版),2003,(04).
[4]朱从旭,陈志刚.用VB实现文件混沌加密[J].电脑编程技巧与维护,2004,(09).
[5]章程军,冯壁华.保密存取光学图象的一种重要方法[J].激光杂志,1996,(05).
[6]张军,张庆来,杜勇,张文化.EFS加密数据恢复[J].甘肃科技,2004,(10).
[7]孙护.直线法加密高程的应用限制和精度[J].测绘通报,1997,(04).
[8]马景艳.用软件工程的方法实现加密演示系统[J].科学管理研究,2004,(S1).
[9]石文昌.电子邮件系统R-MAIL的安全机制设计[J].广西科学院学报,1997,(02).
[10]周德生,陈彪.单片机加密的硬件技术方法[J].黑龙江大学自然科学学报,1997,(03).
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”
关键词:VB程序设计;网络安全;数据加密;代理
中图分类号:TP393文献标识码:A文章编号:1009-3044(2007)12-21592-02
Programming of Visual Basic Apply in the Network
ZENG Yuan-mei
(School of Dongguan University of Science and Technology Yecurity)
Abstract:Computer network transmit information relate to the government、military affairs、economy、culture and education and so on, in this information has many sensitivity information including the nation secret, so hacker and many of sorts virus attack this information. Besides of the design bug of the computer network, a large number of is the security leak and malfeasance use of the computer language.So, in this paper,firstly discussed the log password,then expatiated network data encrypt,finally analysis the implement of the Agent. It has deeply signification in theory and extensive value in applications.
Key words:programming of visual basic; network security; data encrypt; Agent
1 引言
Visual Basic (简称VB) 程序设计语言是创建于Windows 95 开发环境下具有图形用户界面应用程序的迅速简单的程序语言系统,使用它可以完成各种软件设计,因此自1991 年問世以来,就深受Windows开发者的喜爱,得到了迅速推广,是目前应用最广泛的程序设计语言之一。
计算机网络变得日益重要, 事实上已经成为政府、军队、商业领域不可缺少的部分。随着技术的发展, 网络的规模更加庞大, 结构更加复杂, 支持的用户更多,提供更多的服务, 同时也对如何保证网络的正常运行、网络硬件及信息的安全、充分发挥各种网络设备的性能等方面提出了更高的要求。
2 登录口令的设置和处理
密码术是把可懂的文本变成不可懂的形式,以及通过其逆过程把不可懂的文本还原成原来文本的方法和技术。把可懂的文本变换成不可懂的形式的过程,称为加密,其逆过程,即把不可懂的文本还原成可懂的文本的过程,称为脱密或解密。原来的可懂文本称为明文,而变换为不可懂形式的文本称为密文。完成加密解密的算法称为密码体制。
一种密码算法,可以实现两种类型的保密:理论保密和实际保密。理论保密基于这样的原则: 敌手所能获得的或接收到的信息总不足以推导出一个密文的唯一解。也就是说, 不管利用何种分析方法,对于可能的值, 则始终存在着某种程度的不确定性。实际上, 这是不可能达到的, 如果敌手能够获得足够数量的明文和与其相对应的密文, 那么, 是可以唯一地达到其密钥的。实际上保密是建立在这样的一种假设上, 即可以获得足够的信息来破译密码, 并且这一工作可以通过求解一个给定的密码分析问题所需的工作量(即工作因子) 来衡量。这类的保密可以这样来实现: 设计一种密码算法,使得即使在分析者具有特定的算法知识, 并已获得大量的密文/对应的明文或者获得明文/对应的密文的情况下, 要求解报文或密钥, 在计算上是不可行的。
从密钥方式来分, 密码体制有两类: 传统密码和公开密钥密码。传统密码是指加密密钥与解密密钥相同的密码。公开密钥密码则是指加密密钥与解密密钥不相同, 其中加密密钥是公开的密码。
开发JDS时, 采用的是传统密码方法,将明文的ASCII 码作一些调整而得到密文的ASCII码, 这样就能实现对明文的加密。具体做法如下:
(1)对明文的第一个字符进行移位, 移位数为所有明文的ASCII 码的和;
(2)对明文的以后各位进行移位, 移位数为前一位明文的ASCII 码加上所有明文的ASCII 码的和;
(3)如果移位后的ASCII 码超出范围[33 ,126] , 则通过取余运算变换到上述范围;
(4)将密文以ASCII 码链的方式存储在数据库中。
例如, 假设明文为“njhgdx”, 则通过这种算法变为: “{tkaT [”。这种对明文加密的方法的特点是对不同的明文各位移位数是不同的, 从而给解密增加难度。
上述过程用VB6. 0 实现如下(假设明文的最大长度为8):
Public Function passHide (myPassWord As String) As String ′口令加密函数
Dim I As Integer
Dim tempPass1 (8) As Integer ′明文的各位字符的ASCII 码
Dim tempPass2 (8) As String ′密文的各位字符
Dim tempAsc As Integer ′临时ASCII 码
Dim temPass As String ′密文
Dim allLength As Integer ′各位明文的ASCII 码总和
temPass = ″″: allLength = 0
For I = 0 To Len (Trim (myPassWord) ) - 1
tempPass1 ( I) = Asc (Mid ( Trim (myPassWord) , I + 1 , 1) ) ′将明文转换为ASCII 码
allLength = allLength + tempPass1 ( I)
Next I
For I = 0 To Len (Trim (myPassWord) ) - 1
If I > 0 Then
tempPass1 ( I) = tempPass1 ( I) + tempPass1 ( I - 1) + allLength Else
tempPass1 ( I) = tempPass1 ( I) + allLength
End If
tempAsc = tempPass1 ( I) Mod 126
If tempAsc < 33 Then
tempAsc = tempAsc + 33
End If
tempPass 2 ( I) = Chr (tempAsc) ′將密文的ASCII 码对126 取余, 并转化为字符形式
Next I
For I = 0 To Len (Trim (myPassWord) ) - 1
temPass = temPass + tempPass2 ( I)
Next I
passHide = temPass
End Function
当然,上述口令加密的方式只是一种较为粗糙的方法,但对一般的系统而言,则不失为一种有效的数据加密方法,即使能从数据库中获得密文, 也知道加密算法, 却不能轻易获得明文,从而达到在一定程度上对口令的保护。
在JDS 中没有解密算法,在进行口令认证时,只要将输入的口令通过加密算法变成密文的形式,再对照数据库中存储的密文是否与该密文一致即可。
3 网络数据加密解密
在VB.NET可利用CroptoStream流中DESCryptoServiceProvider类的CreateEncryptor进行力加密,CreateDecryptor解密,然后通过MemoryStream流完成数据转换。
加密函数是通过CryptoStream流将末加密文本,通过CreateEncrypto方法加密到MemoryStream流中,再转换输出加密后的数据,代码如下:
Public Function EncryptData(ByVal Value Its String,
ByVal desKey() As Byte, ByVal desIV() As Byte)
Dim ms As New MemoryStream()
Dim byt() As Byte
Dim bin(4096) As Byte'这是加密的中间存储器
Dim rdlen As Long = 8'这是写的字节的总数。
Dim len As Integer'这是被次写的字节的数量。
Dim des As New DESCryptoServiceProvider()
Dim cs As New CryptoStream(ms, des.CreateEncryptor(desKey, desIV), CryptoStreamMode.Write)
byt=Encoding. UTF 8.GetBytes(Value)
cs. Write(byt,0, byt.Length)
cs.FlushFinalBlock()
cs.Close()
Return Convert.ToBase64String(ms.ToArray})
End Function
解密函数是通过CryptoStream流将加密数据,通过CreateDecryptor方法解密到MemoryStream流中,再转换输出解密后的数据,代码如下:
PublicFunction deEncryptData(ByValValueAs
String, ByVal desKey() As Byte, ByVal desIV() As Byte)
Dim ms As New MemoryStream()
Dim byt() As Byte
Dim bin(4096) As Byte
Dim rdlen As Long=8
Dim len As Integer
Dim des As New DESCryptoServiceProvider()
Dim cs As New CryptoStream(ms, des.CreateDecayptor(desKey, desIV), CryptoStreamMode.Write)
byt=Convert.FromBase64String(Value)
cs. Write(byt,0, byt.Length)
cs.FlushFinalBlock()
cs.Close()
Return Encoding.UTF8.GetString(ms.ToArray())
End Function
4 代理(Agent) 的实现
代理端程序在被管理设备上运行, 其主要功能是:
(1)访问MIB 数据库, 显示设备的状态信息;
(2)在管理器读取时将状态信息送到管理器端口;
(3)响应管理器命令, 修改某些对象的值;
(4)发送陷入报文。
代理程序启动时生成代理实例Agent1, 加载SMI和MIB 库及TRAPS 库, 实现程序如下:
Private Agent1 As New Agent
Private Sub LoadMibs ()
Agent1?M ib?Load " smi?mib" //代理装载SM I 库
Agent1?Mib?Load "mib_ ii?m ib" //代理装载M IB 库
Agent1?Mib?Load " trap?mib" //代理装载TRA PS库
Dim MibList As New DartSt rings
MibL ist?Add " smi?mib"
MibL ist?Add "mib_ ii?mib"
MibL ist?Add " t raps?mib"
Agent?Mib?CompileM ibList
End Sub
库文件装载成功后, 代理从MIB中获取并显示被管理对象必要的信息, 程序如下:
Private Sub SetMibsAndLabels ()
Set vsysDescr = A gent1?M ib?Variables (" sysDescr" )
vsysDescr?value = sysDescr?Text
//从M IB 中获取sysDescr 值
Set vsysObject ID = Agent1?Mib?Variables (" sysObject ID" )
vsysObject ID?value = sysObject ID?Text
//从M IB 中获取sysO bject ID 值
…
Set vsysUpTime = Agent1?Mib?Variables (" sysUpTime" )
vsysUpTime?value = GetTickCount - gTickCountRef
//计算出sysUpTime 值
Set vtcpOutSegs = A gent1?Mib?Variables (" tcpOutSegs" ) vtcpOutSegs?1value = tcpOutSegs?Text
//从M IB 中获取tcpO utSegs 值
End Sub
在代理端與管理器之间的互动中, 代理端主要是被动地响应管理器的命令, 各种复杂的工作都由管理器来完成。代理只是在收到管理器端的命令之后, 才通过Agent来完成修改操作。
代理对M IB 数据库的访问功能编码如下:
SetvsysUpTime = A ent1?Mib?Variables (" sysUpTime" )
vsysUpTime?value = GetTickCount-gTickCountRef
If (Agent1?Message?Type= snmpSet1) Or
(Agent1?Message?Type= snmpSet2) Then SetReq= T rue
If (Agent1?Message?Type= snmpGetNext1)Or
(Agent1?Message?Type = snmpGetNext2) Then i= 1
Agent1?Message?Type = snmpResponse1
5 总结
随着WWW技术越来越成熟,Java、CGI、Active X之类的网络新技术给用户带来了五彩缤纷的和便利的界面,同时也给“黑客”提供了攻击的新手段。这些新技术往往是通过一种新语言或者某种语言的扩展来实现的。因此,了解VB程序设计在网络安全中的应用,对设计完善的网络软件及防止网络攻击尤为重要。
参考文献:
[1]雷军程,柳小文, 许鞍铭.用vb实现Microsoft CryptoAPI加密[J].邵阳学院学报(自然科学版),2005,(01)
[2]常晓荣,王磊. 使用CSP开发通用的加密功能[J].西安文理学院学报(自然科学版),2005,(02).
[3]姚世军.陈楚香.用CryptoAPI生成密钥的方法[J].河南教育学院学报(自然科学版),2003,(04).
[4]朱从旭,陈志刚.用VB实现文件混沌加密[J].电脑编程技巧与维护,2004,(09).
[5]章程军,冯壁华.保密存取光学图象的一种重要方法[J].激光杂志,1996,(05).
[6]张军,张庆来,杜勇,张文化.EFS加密数据恢复[J].甘肃科技,2004,(10).
[7]孙护.直线法加密高程的应用限制和精度[J].测绘通报,1997,(04).
[8]马景艳.用软件工程的方法实现加密演示系统[J].科学管理研究,2004,(S1).
[9]石文昌.电子邮件系统R-MAIL的安全机制设计[J].广西科学院学报,1997,(02).
[10]周德生,陈彪.单片机加密的硬件技术方法[J].黑龙江大学自然科学学报,1997,(03).
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”