kNamev: 需要加密的字符串
kPass: 密码串Function KeyGen(kNamev As String, kPass As String) As String
On Error Resume Next 'still here just as a precaution
Dim kName As String
Dim nKeys(16) As Double 'xor keys used for pArray(x) xor nkeys(x)
Dim nArray(16) As Double 'name array data
Dim pArray(16) As Double 'password array data
Dim N As Double 'for next loop counter
Dim nPtr As Double 'name pointer (used for counting)
Dim cPtr As Double 'character pointer (used for counting)
Dim cFlip As Boolean 'character flip (used to flip between numeric and alpha)
Dim sIni As Double 'holds s-box values
Dim temp As Double 'holds s-box values
Dim rtn As Double 'holds generated key values used agains chr map
Dim gKey As String 'generated key as string
Dim nLen As Double 'number of chr's in name
Dim pLen As Double 'number of chr's in password
Dim kPtr As Double 'key pointer
Dim sPtr As Double 'space pointer (used in hex key)
Dim nOffset As Double 'name offset
Dim pOffset As Double 'password offset
Dim tOffset As Double 'total offset
Dim KeySize As Double 'the size of the key to make Const nXor As Double = 25 'name xor value
Const pXor As Double = 18 'password xor value
Const cLw As Double = 65 'character lower limit 65 = A ** do not change **
Const nLw As Double = 48 'number lower limit 48 = 0 ** do not change **
Const sOffset As Double = 0 'character map offset kName = kNamev
nLen = Len(kName)
pLen = Len(kPass) 'password xor keys ** change to make keygen unique **
nKeys(1) = 42
nKeys(2) = 0
nKeys(3) = 15
nKeys(4) = 25
nKeys(5) = 200
nKeys(6) = 1
nKeys(7) = 22
nKeys(8) = 99 sIni = 0
KeySize = 8
gKey = String(19, " ")
kPtr = 1 For N = 1 To nLen 'name
nArray(kPtr) = nArray(kPtr) + Asc(Mid(kName, N, 1)) Xor nXor
nOffset = nOffset + nArray(kPtr)
kPtr = kPtr + 1
If kPtr = 9 Then kPtr = 1
Next N For N = 1 To pLen 'password
pArray(kPtr) = pArray(kPtr) + Asc(Mid(kPass, N, 1)) Xor pXor
pOffset = pOffset + pArray(kPtr)
kPtr = kPtr + 1
If kPtr = 9 Then kPtr = 1
Next N tOffset = (nOffset + pOffset) Mod 512
kPtr = 1
sPtr = 1
For N = 1 To KeySize
pArray(N) = pArray(N) Xor nKeys(N)
rtn = Abs(((nArray(N) Xor pArray(N)) Mod 512) - tOffset)
If rtn < 16 Then
Mid(gKey, kPtr, 2) = "0" & Hex(rtn)
Else
Mid(gKey, kPtr, 2) = Hex(rtn)
End If
If sPtr = 2 And kPtr < 18 Then
kPtr = kPtr + 1
Mid(gKey, kPtr + 1, 1) = "-"
End If
kPtr = kPtr + 2
sPtr = sPtr + 1
If sPtr = 3 Then sPtr = 1
Next
KeyGen = gKey
End Function
kPass: 密码串Function KeyGen(kNamev As String, kPass As String) As String
On Error Resume Next 'still here just as a precaution
Dim kName As String
Dim nKeys(16) As Double 'xor keys used for pArray(x) xor nkeys(x)
Dim nArray(16) As Double 'name array data
Dim pArray(16) As Double 'password array data
Dim N As Double 'for next loop counter
Dim nPtr As Double 'name pointer (used for counting)
Dim cPtr As Double 'character pointer (used for counting)
Dim cFlip As Boolean 'character flip (used to flip between numeric and alpha)
Dim sIni As Double 'holds s-box values
Dim temp As Double 'holds s-box values
Dim rtn As Double 'holds generated key values used agains chr map
Dim gKey As String 'generated key as string
Dim nLen As Double 'number of chr's in name
Dim pLen As Double 'number of chr's in password
Dim kPtr As Double 'key pointer
Dim sPtr As Double 'space pointer (used in hex key)
Dim nOffset As Double 'name offset
Dim pOffset As Double 'password offset
Dim tOffset As Double 'total offset
Dim KeySize As Double 'the size of the key to make Const nXor As Double = 25 'name xor value
Const pXor As Double = 18 'password xor value
Const cLw As Double = 65 'character lower limit 65 = A ** do not change **
Const nLw As Double = 48 'number lower limit 48 = 0 ** do not change **
Const sOffset As Double = 0 'character map offset kName = kNamev
nLen = Len(kName)
pLen = Len(kPass) 'password xor keys ** change to make keygen unique **
nKeys(1) = 42
nKeys(2) = 0
nKeys(3) = 15
nKeys(4) = 25
nKeys(5) = 200
nKeys(6) = 1
nKeys(7) = 22
nKeys(8) = 99 sIni = 0
KeySize = 8
gKey = String(19, " ")
kPtr = 1 For N = 1 To nLen 'name
nArray(kPtr) = nArray(kPtr) + Asc(Mid(kName, N, 1)) Xor nXor
nOffset = nOffset + nArray(kPtr)
kPtr = kPtr + 1
If kPtr = 9 Then kPtr = 1
Next N For N = 1 To pLen 'password
pArray(kPtr) = pArray(kPtr) + Asc(Mid(kPass, N, 1)) Xor pXor
pOffset = pOffset + pArray(kPtr)
kPtr = kPtr + 1
If kPtr = 9 Then kPtr = 1
Next N tOffset = (nOffset + pOffset) Mod 512
kPtr = 1
sPtr = 1
For N = 1 To KeySize
pArray(N) = pArray(N) Xor nKeys(N)
rtn = Abs(((nArray(N) Xor pArray(N)) Mod 512) - tOffset)
If rtn < 16 Then
Mid(gKey, kPtr, 2) = "0" & Hex(rtn)
Else
Mid(gKey, kPtr, 2) = Hex(rtn)
End If
If sPtr = 2 And kPtr < 18 Then
kPtr = kPtr + 1
Mid(gKey, kPtr + 1, 1) = "-"
End If
kPtr = kPtr + 2
sPtr = sPtr + 1
If sPtr = 3 Then sPtr = 1
Next
KeyGen = gKey
End Function
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货