有个程序客户要求每天登录程序时,登录密码都是不一样的,
所以我想根据系统日期,s=format(date,"yyyymmdd"),然后根据这个s值生成一个365*n天都不重复且相邻无规律的6位数字串,
请问该怎么弄?
例:050726 050727 050728 050729 050730
生成的密码串:
123987 345869 343209 343988 320998 要求不重复且看起来无规律谢谢.
我搞来搞去,生成的数字串总是有重复的.而且一看总有规律性(比如隔个一周这些数字串又是一样的或是递增的),
高手指点一下啊.................(生成的序列有些重复没关系,但相邻的数字串不要有规律,要乱序的)
所以我想根据系统日期,s=format(date,"yyyymmdd"),然后根据这个s值生成一个365*n天都不重复且相邻无规律的6位数字串,
请问该怎么弄?
例:050726 050727 050728 050729 050730
生成的密码串:
123987 345869 343209 343988 320998 要求不重复且看起来无规律谢谢.
我搞来搞去,生成的数字串总是有重复的.而且一看总有规律性(比如隔个一周这些数字串又是一样的或是递增的),
高手指点一下啊.................(生成的序列有些重复没关系,但相邻的数字串不要有规律,要乱序的)
跟具时间生存一个字符串,
用MD5算法加上你的密鈅生成16位密码,(密鈅可以是动态的)
对这16位取ASC值得到32位的数字。Private Function GetCode(str As String)
Dim i As Integer
Dim c As Integer
Dim code As String
str = MD5.MD5(str & "你的密鈅", 32)
For i = 1 To 16
c = Asc(Mid(str, i, 1))
If c > 99 Then c = c - 32 '这句保存每个字符对应两位数字
code = code & c
Next
GetCode = code
End FunctionMD5是一个类,代码我就不贴了,其实可以用其它的算法,不一定是MD5。
你这种加密的手段很好,不怕对方抓取数据包分析你的密码,但如果客户机日期和服务器的日期不一样时,会造成登陆失败!
所以你等到了一个没有规律的小数,随便你去变化了
最后生成的字符串是sn
Private Function strEncrypt(strSource As String, strKey As String) As String '字符串加密函数
Dim n, m, i, X, k, y, zn = Len(strSource)
m = Len(strKey)
strEncrypt = ""
For i = 1 To n
X = Asc(Mid(strSource, i, 1))
k = 1 + ((i - 1) Mod m)
y = Asc(Mid(strKey, k, 1))
z = X Xor y
z = 33 + z - Int(z / 95) * 95
strEncrypt = strEncrypt + Chr(z)
Next i
strEncrypt = strEncrypt
End FunctionPrivate Sub Command1_Click()
Dim dt As Date
Dim sn As String
dt = Date
sn = Format(dt - #1/1/2000#, "000000")
sn = strEncrypt(sn, "0")
msgbox sn
End Sub