说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
VB如何实现VB程序登录密码加密
作者:李志东
现在有些软件都设置密码登录,启动软件时要求使用者输入有效的密码。其实密码就是对明文文本进行一一对应的变换,使这变成不可识别的密码文本,让非法使用者不能识别。

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

首先,建立一个标准EXE工程,在窗体上放置一个TextBox控件,名称为txtPassword,PasswordChar属性为"*"。再放置两个CommandButton控件,第一个的名称为CmdSave,Caption属性为"保存密码(&S)",另一个的名称为CmdExit,Caption属性为"退出(&Q)"。

主程序原代码如下:
Option Explicit
'定义变量
Dim Filenum As Integer
Dim LoadFiles As String

Private Sub txtPassword_Change()
CmdSave.Enabled = True
End 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) > 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, 1, 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 <> txtPassword.Text Then
If InputString <> "http://vbboshi.126.com" Then
MsgBox "你输入密码错误!", vbExclamation, "错误": End
Else
txtPassword.Text = Empty
End If
End If

CmdSave.Enabled = False
End Sub

Private Sub cmdexit_Click() '退出程序
Unload Me
End 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 >= 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
To_Text = To_Text & Chr$(ch)
End If
Next i
End 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 >= 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
To_Text = To_Text & Chr$(ch)
End If
Next i
End 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 = Value
End Function

Email: gzboshi@21cn.com

本程序在 Windows98SE+VB5.0 中运行通过。
(广州 李志东)
看Java技术基础的eBay如何评价他们的Node.js首次尝鲜 Jolla发布首款Sailfish系统手机 无缝兼容Android应用 NPD:全球智能手机出货量2013年将首次超过功能手机 聚合数据左磊:不走寻常路 做国内最好的数据聚合平台 从程序员到软件商 需要注意些什么? 怎样对齐文本输出格式? 给几个XML和JSP结合使用的例子,谢谢。 急!请关注:关于EVC中的中文显示问题 已经上传了附件到 数据库(image格式,同时有一个记录扩展名的字段),我的问题客户端如何下载?或者直接用ie查看 终于上宽带了,真他妈爽,以后上网不用考虑时间了. TClientDataset同时添加两条记录就失败,一条就正确(解决再加100) 与总工和Borland产品专家面对面第二期:项目管理过程和软件配置管理培训---最新更新 大家在开发ASP.NET网页时用的是那种工具较多? VS.NET 还是DW MX ?或什么较好的? 关于asp注册以及登陆的问题 Would you like some marke Though it was difficult,t They were on a long journ 冰雹,台风,飓风分别是怎样形成,我需要英文解释 秋刀鱼有毒吗 I read some storybooks la Jenny usually goes to the He has some magazines 改为一 Would you like to get me 英国首个“音乐试管婴儿”诞生 狂爱听探访朝鲜志愿军墓 中国老战士和烈士家我国海军三大舰队首次在西太平洋展开实新消法规定网购7日内可无理由退货两男子甬台温高速上拦路称搭顺风车趁机中网资格赛名单出炉 阵容强大看点十足电动车司机横穿公路 被轿车撞飞瞬间中国民众办事无需再提供(无)婚姻登记国产大飞机C919亮相北京航空展 共珠三角今年底全面实施国Ⅴ排放标准 明民国或者帝国异形天下路西法之光暗传说快递之王修真多金王禾木河旅游禾木桥旅游曾国藩墓旅游容美土司城遗址旅游证果寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘