RC4 Использование VBScript и Python - PullRequest
0 голосов
/ 27 февраля 2019

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

Для моего кода Python у меня естьследующее:

def rc4crypt(data, key):
    x = 0
    box = range(256)
    for i in range(256):
        x = (x + box[i] + ord(key[i % len(key)])) % 256
        box[i], box[x] = box[x], box[i]
    x = 0
    y = 0
    out = []
    for char in data:
        x = (x + 1) % 256
        y = (y + box[x]) % 256
        box[x], box[y] = box[y], box[x]
        out.append(chr(ord(char) ^ box[(box[x] + box[y]) % 256]))

    return ''.join(out)

Из того, что я могу сказать из моих интернет-исследований, это довольно стандартный способ реализации RC4.Тем не менее, когда дело доходит до VBScript, мне было немного трудно.

Вот мой код:

Function RunRC4(sMessage, strKey)
    Dim kLen, x, y, i, j, temp, l
    Dim s(256), k(256)

    'Init keystream
    kLen = Len(strKey)
    For i = 0 To 255
        s(i) = i
        l = Mid(strKey, (i Mod kLen) + 1, 1)
        k(i) = Asc(Mid(strKey, (i Mod kLen) + 1, 1))

    Next

    j = 0
    For i = 0 To 255
        j = (j + k(i) + s(i)) Mod 256
        temp = s(i)
        s(i) = s(j)
        s(j) = temp
    Next

    'Encode/Decode
    For i = 1 To Len(sMessage)
        x = (x + 1) Mod 256
        y = (y + s(x)) Mod 256
        temp = s(x)
        s(x) = s(y)
        s(y) = temp

        temp1 = Asc(Mid(sMessage, i, 1))
        temp2 = Chr(s((s(x) + s(y)) Mod 256))
        RunRC4 = RunRC4 & Chr(temp1 Xor temp2)
    Next
End Function

Это очень похоже на многиедругие посты там.Есть пара связанных постов, которые я нашел с людьми, задающими подобные вопросы, но не совсем тот ответ, который я ищу:

Шифрование строки в java и дешифрование в VBScript с использованием RC4

Расшифровка RC4 с ключом в Python

Как вы могли бы сказать, оба из них используют довольно похожий сценарий.Но ни один из них не работает должным образом при попытке декодирования.Я также посмотрел другие места, в том числе алгоритм, такой как:

https://bytes.com/topic/access/insights/906671-rc4-encryption-algorithm-vba-vbscript

Кто-нибудь сможет помочь?Было бы полезно узнать, удалось ли вам успешно запустить каждую функцию.В идеале цель состоит в том, чтобы запустить шифрование с помощью VBScript, взять вывод и расшифровать с помощью Python и получить ожидаемый исходный результат.

1 Ответ

0 голосов
/ 27 февраля 2019

Проблема будет в кодировании.Просто просматривая документацию по Python, функция chr()

Возвращает символ (строку) из целого числа (представляет кодовую точку Unicode символа )

, тогда как в VBScript функция Chr()

Возвращает символ, связанный с указанным кодом символа ANSI

, что не эквивалентно, вместо этого вам нужно использовать функцию ChrW() в VBScript.

ChrW предоставляется для 32-битных платформ, которые используют символы Unicode.Его аргументом является Unicode (широкий) код символа , что позволяет избежать преобразования из ANSI в Unicode.

Кроме того, при возврате кода символа вам нужно будет использовать AscW() функция вместо Asc() функция , которая эквивалентна Python ord() функция .

AscW предоставляется для 32-битных платформ, которыеиспользуйте символы Юникода.Он возвращает Юникод (широкий) символьный код , тем самым избегая преобразования из Юникода в ANSI.


Полезные ссылки

...