Function EncryptPassword(vPwd)
vTempPwd = ""
EncryptPassword = ""
For i = 1 To Len(vPwd)
vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, i))) / 2)
Next
For i = Len(vPwd) + 1 To 10
vTempPwd = vTempPwd & CStr(i - Len(vPwd))
Next
EncryptPassword = vTempPwd
End Function
我被要求为上面的加密密码写一个 decrypt 解密函数。
有什么想法吗?
答案 0 :(得分:1)
以下函数将为您提供一个字符串密码,如果传递给EncryptPassword函数,最后会使用与原始密码相同的密码字符串。
Function DecryptPassword(vPwd)
vTempPwd = ""
DecryptPassword = ""
For i = 1 To Len(vPwd)
vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, 1)) * 2))
Next
DecryptPassword = vTempPwd
End Function
注意:它不一定会返回与原始密码完全相同的字符串,因为每个字符至少有一个“碰撞”字符,即它们将加密到相同的值。此外,EncryptPassword函数会将其填充至少10个字符,因此如果您的原始密码较短,您将得到一个10个字符的字符串,该字符串会加密到相同的字符串。
下面是我使用cscript运行.vbs文件测试的完整脚本
pw1 = "password1234"
pwC1 = EncryptPassword(pw1)
pw2 = DecryptPassword(pwC1)
pwC2 = EncryptPassword(pw2)
If pwC1 = pwC2 Then
WScript.Echo pw1 & " and " & pw2 & " cipher to the same value off " & pwC1
else
WScript.Echo pw1 & " chipher is " & pwC1 & " and " & pw2 & " cipher is " & pwC2
End If
Function EncryptPassword(vPwd)
vTempPwd = ""
EncryptPassword = ""
For i = 1 To Len(vPwd)
vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, i))) / 2)
Next
For i = Len(vPwd) + 1 To 10
vTempPwd = vTempPwd & CStr(i - Len(vPwd))
Next
EncryptPassword = vTempPwd
End Function
Function DecryptPassword(vPwd)
vTempPwd = ""
DecryptPassword = ""
For i = 1 To Len(vPwd)
vTempPwd = vTempPwd & Chr((255 - Asc(Mid(vPwd, i, 1)) * 2))
Next
DecryptPassword = vTempPwd
End Function
注意:正如原始问题Asc(Mid(vPwd, i, i))
的注释中所说的那样也可以是Asc(Mid(vPwd, i, 1))
,因为Asc函数只会解析第一个字符。