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

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 中运行通过。
(广州 李志东)
一周消息树:CES2013揭幕 科技巨头纷纷发力 2012专利排行榜 IBM位列第一、Google增长最快! 微软赞黑客并称Windows RT越狱非安全漏洞所致 周报第46期:GitHub历史上最糟糕宕机事故回放及反省 著名计算机黑客Aaron Swartz自杀身亡 移动周报:移动互联网行业技术趋势前瞻 旁门左道:让移动游戏下载量暴涨的邪门功夫 可植入身体:“可穿戴计算”时代来临 Web服务器份额:Apache仍居首,Nginx将超IIS 防税务欺诈:挪威财政部将开源收银机代码 响应式设计实战:3人+1.5个月 IE10优化版cnBeta诞生记 不听乔布斯劝告:“不专心”的Google照样干得好 躲过一劫!苹果不锁杂志类APP介绍截图 Oracle发布软件更新修复Java漏洞 设计师将吞噬工程师吗? 开源产品系列:小巧灵活的Web框架web.py Windows Server 2012 VHDX格式揭秘 Rovio将赶超Zynga 成为全球最受欢迎游戏公司 Netflix基于AWS的大数据平台Hadoop架构解析 微软开始提供Windows Embedded测试版系统 Aaron Swartz自杀原因存疑 引发互联网连锁反应 重金吸引开发者 BlackBerry10应用36小时增1.5万 把数据中心搬入“空间站” Dell和Intel对OpenStack新兴公司Mirantis投资 快讯:马云自5月10日起不再担任CEO职务 Web工程师必备的43款可视化工具 中国电信天翼开放平台2012年度数据:API调用量破亿 iOS走向开放:UC浏览器iPhone版实现云下载 让Dreamweaver支持cshtml (MVC Razor环境) iOS付费榜首:日历应用Fantastical开发者专访 玩转AdMob移动广告:捕鱼达人的猎财之道 请大家看看这条语句有什么错? 关于isdn在win2000下共享的问题 各位水友,有力的出力,没力的看看,拜托 请从位高手帮小弟解决一个棘手的问题……………………多谢!!!!!!! ALLTEC(荔枝)兄弟,兄弟我接帖太快 :( 請這邊來. ★★★ 救命啊! VC 用ODBC访问 Access 数据库的问题 guo->你在www.linuxforum.net中叫什么?有个guoemail是你吗? 软件发布:市场摊位租赁管理系统Ver1.0 软件发布:量和单位转换软件(免费版) 软件发布:五笔快打 在listview中的各个记录listitem中,有没有双击记录的事件 软件发布:伏羲服装鞋业购销存管理系统 软件发布:进销存商务管理pcft-jxc 征集各地童谣.唤醒儿时记忆! 今天我请客! 有关vb调用excel的问题! 有没有关于BDE的单独的分发程序? VB中报表预览打印能不能实现象EXCEL中一样的“按比例缩放”?如何实现? 单机版流量统计 关于Delphi6的安装问题 动态计算公式怎么实现?? 常用的英文字体是什么? 在通信过程中怎样做到防监听、防篡改? 各位大虾现欲用java开发一套网上投票表决系统 应该看什么书?用什么开发工具?(一定给分!) 关于winsock的问题,急急 怎样使用VB6中TREEVIEW控件? 我真的要疯了! 这里有很多Delphi6的控件! 如何在ASP中传递多个参数?displaymsg.asp?page=1在后面我还想加另外一个参数 有没有喜欢画漫画的? 如何得到ActiveX控件的窗口句柄 请问mif文件格式以及、读写方法?高分求解 sco unix的root口令忘了,谢谢. 在PowerBuilder中使用Microsoft Web浏览器控件 ,这个控件在ole中怎么没有啊? 急盼有人答复!!!!!! 急!急!编译exe时出现:link errors提示 具体提示:create of executable file failed? 小笨笨一问 年年岁岁花相似,岁岁年年人不同 VC++初学者的几个大烦恼!(苦呀,谁来拯救我这个VC小兵?) 请教在DELPHI中调用API发送EMAIL的问题!!!!! 有谁知道没有封闭25端口的美国ISP的地址信息??? 水园的过去现在未来 -- 座谈一下 哭笑沉默怒骂攻击噌分拉关系白脸黑脸等等都欢迎 高分求购速达软件单据编辑的DBGrid组件或设计思想! 发表一下意见,做报表用那个控件好 谁有对话框实现的计算器的源程序? 帮小弟看一下这段程序,不好意思,只有10分了 Delphi多线程有用吗? 初学JAVA,还有一些问题烦劳各位大侠指点? 请教一个c语言库函数问题? 动不动就谈"爱国"的人请进 如何改变开机声音??? 2+2等于几? 3小时25分等于多少小时,怎么来的 大肠杆菌感受态细胞的制备与转化实验:在转化实验中,涂平板前需要在37度下振荡培养30-60min大肠杆菌感受态细胞的制备与转化实验:在转化实验中,涂平板前需要在37度下振荡培养30-60min,请 2+2等于几啊 8π-20 等于多少?怎么算, 大肠杆菌DH52a感受态细胞 25下午1点,25小时后是几号的几点? 用分数表示:25分钟=( )小时,2500克=( )千克 提取DNA后为什么要跑胶 已知一个角的余角是它的余角的1/4,求这个角的度数? 第25小时怎么样 25分钟=( )小时 最简分数 如图,已知△ABC全等于△ADE,∠CAD=10°,∠DFB=90°,∠B=25°,求∠E与∠DGB的度数. 第25小时电影求求求, 2.15小时=?小时(用分数表示) 3小时15分=?小时 如图,已知△ABC全等于△ADE,且∠CAD=10°,∠D=25°,∠EAB=120°,求∠DFB和∠DGB的度数. 第25小时的结局他爸爸要载他去哪里?是帮他越狱?还是送进监狱? 45分钟=多少小时 用分数表示 如图10,已知△ABC全等△ADE,且∠CAD=10°,∠EAB=120°,求∠DFB和∠DGB的度数 如果一天不是24小时 是25小时,一小时是70分钟 你会怎么办? 正切1度29分是多少 以现在来计算,1元人民币等于多少泰铢~还有如果在泰国吃一个普通快餐大概需要多少泰铢~因为迟一点我去泰国玩,所以必须问清楚, 黄金一盎司等于多少克 正切根3是45度,那么正切根2是多少度呢 1角8分等于几元 一盎司等于多少克黄金? 正切45是多少 1角等于多少平方米 一盎司黄金等于多少克 15.8°化成度 分 秒 1°等于几分 一盎司黄金等于多少克黄金? 8/15-1/4= 一元等于几分呢? 黄金1斤等于多少两 0.8,里面有( )1/15 1块等于几分几毫几里 1港两黄金等于多少克 正切函数的一个问题可是从函数图象上来看,在不一样的区间有不一样的对称中心啊.. 1+1等于几多 1盎司黄金等于多少克 什么是正切函数 如果1+2=2+1 那么我爱你等于你爱我么 怎样理解为公司节约一分钱就等于为公司挣得一分钱? 一道正切函数题求函数Y=tan^2x+tanx+1(x属于R,x不等于kpai+pai/2)的值域. 如果1+1=2,那么你爱我是不是等于我爱你? 一分钱等于多少百元 (1)正切函数在整个定义域内是增函数吗?理由?(2)正切函数会不会在某一区间内是减函数?理由? 如果1+2=2+1,那么我爱你就等于你爱我吗?付出就会有回报吗? 请问多少“厘”等于一分钱? 关于正切函数正切函数在其定义域内是增函数,这句话对吗? 1+2=2+1那么是不是我爱你,也等于你爱我 中国一厘钱等于多少元?多少分? 大肠杆菌感受态细胞制备试验中为什么转化后要在37℃摇床上温育45min 如果1+2=2+1 那么我爱你是不是等于你爱我 一分等于几时 如何制备大肠杆菌感受态细胞 2+2到底等于几呢 14小时35分等于几小时 大肠杆菌制备感受态细胞和重组子转化实验中,没有实验结果大肠杆菌制备感受态细胞和重组子转化实验中,将重组子放在含抗生素的培养皿中培养,也就是用蓝白班的方法,但是培养皿上什么颜
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn