• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

如何实现VB程序登录密码加密

发布: 2007-6-21 21:57 | 作者: 李志东  | 来源: VB编程乐园  | 查看: 64次 | 进入软件测试论坛讨论

领测软件测试网

   

  现在有些软件都设置密码登录,启动软件时要求使用者输入有效的密码。

  其实密码就是对明文文本进行一一对应的变换,使这变成不可识别的密码文本,让非法使用者不能识别。

  本程序是通过,输入登录密码,然后把用户密码加密保存到文本里。

  首先,建立一个标准EXE工程,在窗体上放置一个TextBox控件,名称为txtPassword,PasswordChar属性为"*"。

  再放置两个CommandButton控件,第一个的名称为CmdSave,Caption属性为"保存密码(&S)",另一个的名称为CmdExit,Caption属性为"退出(&Q)"。

  主程序原代码如下:

  Option Explicit定义变量Dim Filenum As IntegerDim LoadFiles As String

  Private Sub txtPassword_Change()

  CmdSave.Enabled = TrueEnd Sub

  Private Sub CmdSave_Click() 保存密码

  当密码输入为空时,则提示信息。

  If txtPassword.Text = Empty Then

  MsgBox "请你输入要更改的密码!", vbExclamation, Me.Caption

  Exit Sub

  End If

  将你输入的密码加密到Cipher_Text的变量里

  Dim Cipher_Text As String

  SubCipher txtPassword.Text, txtPassword.Text, Cipher_Text

  保存到文件并加密

  Filenum = FreeFile

  

  Open LoadFiles For Random As Filenum

  把Cipher_Text的变量写入文件里

  Put #Filenum, 1, Cipher_Text

  Close Filenum

  

  CmdSave.Enabled = False

  End Sub

  Private Sub Form_Load()On Error Resume Next

  密码信息文件的路径

  LoadFiles = App.Path & IIf(Len(App.Path) $#@62; 3, "\key.dat", "key.dat")

  

  Dim FilesTest As Boolean

  检验key.dat文件是否存在

  If Dir(LoadFiles, vbHidden) = Empty Then

  FilesTest = False

  Else

  FilesTest = True

  End If

  Filenum = FreeFile 提供一个尚未使用的文件号

  读取密码文件,把文件的信息赋值给StrTarget变量

  Dim StrTarget As String

  Open LoadFiles For Random As Filenum

  Get #Filenum, StrTarget

  Close Filenum

  如果key.dat文件已存在,则要求输入登录密码

  If FilesTest = True Then

  Dim InputString As String

  InputString = InputBox("请你输入登录密码" & Chr(13) & Chr(13) & "万能密码:http://vbboshi.126.com", "密码登录", InputString)

  End If

  将你输入的密码解密到Plain_Text变量

  Dim Plain_Text As String

  SubDecipher InputString, StrTarget, Plain_Text

  txtPassword.Text = Plain_Text

  密码输入错误,则退出程序

  If InputString $#@60;$#@62; txtPassword.Text Then

  If InputString $#@60;$#@62; "http://vbboshi.126.com" Then

  MsgBox "你输入密码错误!", vbExclamation, "错误": End

  Else

  txtPassword.Text = Empty

  End If

  End If

  

  CmdSave.Enabled = FalseEnd Sub

  Private Sub cmdexit_Click() 退出程序

  Unload MeEnd Sub

  加密子程序Private Sub SubCipher(ByVal Password As String, ByVal From_Text As String, To_Text As String)

  Const MIN_ASC = 32 Space.

  Const MAX_ASC = 126 ~.

  Const NUM_ASC = MAX_ASC - MIN_ASC + 1

  

  Dim offset As Long

  Dim Str_len As Integer

  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 $#@62;= MIN_ASC And ch $#@60;= MAX_ASC Then

  ch = ch - MIN_ASC

  offset = Int((NUM_ASC + 1) * Rnd)

  ch = ((ch + offset) Mod NUM_ASC)

  ch = ch + MIN_ASC

  To_Text = To_Text & Chr$(ch)

  End If

  Next iEnd Sub

  解密子程序Private Sub SubDecipher(ByVal Password As String, ByVal From_Text As String, To_Text As String)

  Const MIN_ASC = 32 Space.

  Const MAX_ASC = 126 ~.

  Const NUM_ASC = MAX_ASC - MIN_ASC + 1

  

  Dim offset As Long

  Dim Str_len As Integer

  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 $#@62;= MIN_ASC And ch $#@60;= MAX_ASC Then

  ch = ch - MIN_ASC

  offset = Int((NUM_ASC + 1) * Rnd)

  ch = ((ch - offset) Mod NUM_ASC)

  If ch $#@60; 0 Then ch = ch + NUM_ASC

  ch = ch + MIN_ASC

  To_Text = To_Text & Chr$(ch)

  End If

  Next iEnd Sub

  将你输入的每个字符转换成密码数字Private Function NumericPassword(ByVal Password As String) As Long

  Dim Value As Long

  Dim ch As Long

  Dim Shift1 As Long

  Dim Shift2 As Long

  Dim i As Integer

  Dim Str_len As Integer

  

  得到字符串内字符的数目

  Str_len = Len(Password)

  给每个字符转换成密码数字

  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 = ValueEnd Function

  本程序在Windows98SE+VB5.0中运行通过。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网