Невозможно разделить функцию выборки на две отдельные функции - PullRequest
0 голосов
/ 06 мая 2018

Я нашел эту функцию для шифрования и дешифрования строк, и это пример кода из его документации. В этом примере они использовали шифрование и дешифрование в одном блоке кодов и создали переменную-посредник с именем bytOut, которая используется как для дешифрования, так и для шифрования.

Я хочу создать две отдельные функции, но я не знаю, как повторно использовать bytOut во второй функции, поскольку она генерируется в первой функции:

Это источник выборки:

<%
sPlain="test"
sPassword="key"

lLength = Len(sPlain)
ReDim bytIn(lLength-1)
For lCount = 1 To lLength
    bytIn(lCount-1) = CByte(AscB(Mid(sPlain, lCount, 1)))
Next

lLength = Len(sPassword)
ReDim bytPassword(lLength-1)
For lCount = 1 To lLength
    bytPassword(lCount-1) = CByte(AscB(Mid(sPassword, lCount, 1)))
Next

'Here the bytOut is generated:
bytOut = EncryptData(bytIn, bytPassword)

sTemp = ""
For lCount = 0 To UBound(bytOut)
    sTemp = sTemp & Right("0" & Hex(bytOut(lCount)), 2)
Next

Response.Write "Encrypted=" & sTemp & "<BR>"

'Here the bytOut is used again
bytClear = DecryptData(bytOut, bytPassword)

lLength = UBound(bytClear) + 1
sTemp = ""
For lCount = 0 To lLength - 1
    sTemp = sTemp & Chr(bytClear(lCount))
Next
Response.Write "Decrypted=" & sTemp
%>

Я написал эти две функции, но, очевидно, вторая не будет работать, поскольку bytOut не инициализирован:

Функция MyEncrypt:

Function MyEncrypt(sPlain)
    sPassword = "key"

    lLength = Len(sPlain)
    ReDim bytIn(lLength-1)
    For lCount = 1 To lLength
        bytIn(lCount-1) = CByte(AscB(Mid(sPlain, lCount, 1)))
    Next

    lLength = Len(sPassword)
    ReDim bytPassword(lLength-1)
    For lCount = 1 To lLength
        bytPassword(lCount-1) = CByte(AscB(Mid(sPassword, lCount, 1)))
    Next

    bytOut = EncryptData(bytIn, bytPassword)

    sTemp = ""
    For lCount = 0 To UBound(bytOut)
        sTemp = sTemp & Right("0" & Hex(bytOut(lCount)), 2)
    Next
    MyEncrypt = sTemp
End Function

MyDecrypt функция:

Function MyDecrypt(sPlain)
    sPassword = "key"

    lLength = Len(sPassword)
    ReDim bytPassword(lLength-1)
    For lCount = 1 To lLength
        bytPassword(lCount-1) = CByte(AscB(Mid(sPassword, lCount, 1)))
    Next

    'I don't know how to generate bytOut here?

    bytClear = DecryptData(bytOut, bytPassword)

    lLength = UBound(bytClear) + 1
    sTemp = ""
    For lCount = 0 To lLength - 1
        sTemp = sTemp & Chr(bytClear(lCount))
    Next

    MyDecrypt = sTemp
End Function

1 Ответ

0 голосов
/ 07 мая 2018

Вам нужно передать свою шестнадцатеричную строку в функцию MyDecrypt() и преобразовать ее обратно в байтовый массив:

Function MyDecrypt(<b>sCrypt</b>)
    sPassword = "key"

    lLength = Len(sPassword)
    ReDim bytPassword(lLength-1)
    For lCount = 1 To lLength
        bytPassword(lCount-1) = CByte(AscB(Mid(sPassword, lCount, 1)))
    Next

    <b>bLength = Int((Len(sCrypt)+1) / 2) - 1
    ReDim bytOut(bLength)
    For i = 0 To bLength
      bytOut(i) = CByte(Int("&h" & Mid(sCrypt, 2*i+1, 2)))
    Next</b>

    bytClear = DecryptData(bytOut, bytPassword)

    lLength = UBound(bytClear) + 1
    sTemp = ""
    For lCount = 0 To lLength - 1
        sTemp = sTemp & Chr(bytClear(lCount))
    Next

    MyDecrypt = sTemp
End Function

Я бы также порекомендовал передать пароль / ключ в качестве параметра обеим вашим функциям и реорганизовать часть, которая преобразует его в байтовый массив, в другую функцию, которая может использоваться как в MyEncrypt(), так и в MyDecrypt().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...