VB6密码生成工具在中文/俄文PC上失败
我继承了一些遗留的vb6代码。这是一个为windows pc生成本地管理员密码的工具。该密码应仅包含有限的字符集。这工具很好用。。只要它不在中国或俄罗斯的个人电脑上运行,它就会生成奇怪的密码,没有人能输入。当然,这与当前的操作系统文化有关。Chr(CharCode)函数在这些系统上返回一些奇怪的字符。有人知道如何使这种文化保持不变吗?我只希望该工具生成带有标准ASCII字符的密码VB6密码生成工具在中文/俄文PC上失败,vb6,cultureinfo,Vb6,Cultureinfo,我继承了一些遗留的vb6代码。这是一个为windows pc生成本地管理员密码的工具。该密码应仅包含有限的字符集。这工具很好用。。只要它不在中国或俄罗斯的个人电脑上运行,它就会生成奇怪的密码,没有人能输入。当然,这与当前的操作系统文化有关。Chr(CharCode)函数在这些系统上返回一些奇怪的字符。有人知道如何使这种文化保持不变吗?我只希望该工具生成带有标准ASCII字符的密码 Function generatePassword(PASSWORD_LENGTH) Dim NUMLOWER, N
Function generatePassword(PASSWORD_LENGTH)
Dim NUMLOWER, NUMUPPER, LOWERBOUND, UPPERBOUND, LOWERBOUND1, UPPERBOUND1, SYMLOWER, SYMUPPER
Dim newPassword, count, pwd
Dim pCheckComplex, pCheckComplexUp, pCheckComplexLow, pCheckComplexNum, pCheckComplexSym, pCheckAnswer
NUMLOWER = 48 ' 48 = 0
NUMUPPER = 57 ' 57 = 9
LOWERBOUND = 65 ' 65 = A
UPPERBOUND = 90 ' 90 = Z
LOWERBOUND1 = 97 ' 97 = a
UPPERBOUND1 = 122 ' 122 = z
SYMLOWER = 33 ' 33 = !
SYMUPPER = 46 ' 46 = .
pCheckComplexUp = 0 ' used later to check number of character types in password
pCheckComplexLow = 0 ' used later to check number of character types in password
pCheckComplexNum = 0 ' used later to check number of character types in password
pCheckComplexSym = 0 ' used later to check number of character types in password
' initialize the random number generator
Randomize
newPassword = ""
count = 0
Do Until count = PASSWORD_LENGTH
' generate a num between 2 and 10
' if num <= 2 create a symbol
If Int((10 - 2 + 1) * Rnd + 2) <= 2 Then
'pwd = Int( ( SYMUPPER - SYMLOWER + 1 ) * Rnd + SYMLOWER )
pwd = Int((UPPERBOUND1 - LOWERBOUND1 + 1) * Rnd + LOWERBOUND1)
' if num is between 3 and 5 create a lowercase
ElseIf Int((10 - 2 + 1) * Rnd + 2) > 2 And Int((10 - 2 + 1) * Rnd + 2) <= 5 Then
pwd = Int((UPPERBOUND1 - LOWERBOUND1 + 1) * Rnd + LOWERBOUND1)
' if num is 6 or 7 generate an uppercase
ElseIf Int((10 - 2 + 1) * Rnd + 2) > 5 And Int((10 - 2 + 1) * Rnd + 2) <= 7 Then
pwd = Int((UPPERBOUND - LOWERBOUND + 1) * Rnd + LOWERBOUND)
Else
pwd = Int((NUMUPPER - NUMLOWER + 1) * Rnd + NUMLOWER)
End If
If Chr(pwd) <> "l" And Chr(pwd) <> "I" Then
newPassword = newPassword + Chr(pwd)
count = count + 1
End If
'Check to make sure that a proper mix of characters has been created. If not discard the password.
If count = (PASSWORD_LENGTH) Then
For pCheckComplex = 1 To PASSWORD_LENGTH
'Check for uppercase
If Asc(Mid(newPassword, pCheckComplex, 1)) > 64 And Asc(Mid(newPassword, pCheckComplex, 1)) < 90 Then
pCheckComplexUp = 1
'Check for lowercase
ElseIf Asc(Mid(newPassword, pCheckComplex, 1)) > 96 And Asc(Mid(newPassword, pCheckComplex, 1)) < 123 Then
pCheckComplexLow = 1
'Check for numbers
ElseIf Asc(Mid(newPassword, pCheckComplex, 1)) > 47 And Asc(Mid(newPassword, pCheckComplex, 1)) < 58 Then
pCheckComplexNum = 1
'Check for symbols
ElseIf Asc(Mid(newPassword, pCheckComplex, 1)) > 32 And Asc(Mid(newPassword, pCheckComplex, 1)) < 47 Then
pCheckComplexSym = 1
End If
Next
'Add up the number of character sets. We require 3 or 4 for a complex password.
pCheckAnswer = pCheckComplexUp + pCheckComplexLow + pCheckComplexNum + pCheckComplexSym
If pCheckAnswer < 3 Then
newPassword = ""
count = 0
End If
End If
Loop
'The password is good so return it
generatePassword = newPassword
End Function
函数生成密码(密码长度)
暗数值下限、数值上限、下限、上限、下限1、上限1、符号下限、符号上限
密码,计数,密码
Dim pCheckComplex、pCheckComplexUp、pCheckComplexLow、pCheckComplexNum、pCheckComplexSym、pCheckAnswer
NUMLOWER=48'48=0
NUMUPPER=57'57=9
下限=65'65=A
上限=90'90=Z
下限1=97'97=a
上限1=122'122=z
SYMLOWER=33'33=!
符号上限=46'46=。
pCheckComplexUp=0'稍后用于检查密码中的字符类型数
pCheckComplexLow=0'稍后用于检查密码中的字符类型数
pCheckComplexNum=0'稍后用于检查密码中的字符类型数
pCheckComplexSym=0'稍后用于检查密码中的字符类型数
'初始化随机数生成器
随机化
newPassword=“”
计数=0
直到计数=密码长度
'生成一个介于2和10之间的数值
'如果num 96和Asc(Mid(newPassword,pCheckComplex,1))<123,则
pCheckComplexLow=1
“查一下数字
如果Asc(Mid(新密码,pCheckComplex,1))大于47,Asc(Mid(新密码,pCheckComplex,1))小于58
pCheckComplexNum=1
'检查符号
如果Asc(Mid(新密码,pCheckComplex,1))大于32,Asc(Mid(新密码,pCheckComplex,1))小于47
pCheckComplexSym=1
如果结束
下一个
'将字符集的数量相加。我们需要3或4个复杂的密码。
pCheckAnswer=pCheckComplexUp+pCheckComplexLow+pCheckComplexNum+pCheckComplexSym
如果pCheckAnswer<3,则
newPassword=“”
计数=0
如果结束
如果结束
环
'密码很好,请返回它
generatePassword=newPassword
端函数
由于俄文和中文电脑(以及其他许多电脑)不使用ASCII字符集,而是使用特定于文化的UNICODE,因此我对您的密码程序生成用户无法键入的密码并不感到惊讶
只有远离ASCII,才能获得成功
在线提供了许多开源密码生成器。如果你能找到一个带有源代码的,那么可以说,你会很有收获。因为俄罗斯和中国的电脑(以及许多其他电脑)不使用ASCII字符集,而是使用特定于文化的UNICODE,所以我对你的密码程序生成用户无法输入的密码并不感到惊讶 只有远离ASCII,才能获得成功
在线提供了许多开源密码生成器。如果你能找到一个有源代码的,那么可以这么说,你会很有收获。Deanna的评论是正确的。只需将
Chr
更改为ChrW
并将Asc
更改为AscW
接受Unicode码点ChrW
接受“ANSI”代码点,特定代码点的含义因系统代码页而异。例如,在中文和俄文代码页上Chr
Deanna的评论是正确的。只需将
Chr
更改为ChrW
并将Asc
更改为AscW
接受Unicode码点ChrW
接受“ANSI”代码点,特定代码点的含义因系统代码页而异。例如,在中文和俄文代码页上Chr