我一直在尝试学习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
与其他许多帖子非常相似。我找到了一些与相关人员相关的帖子,他们问类似的问题,但不是我要找的答案:
Encrypt a string in java and decryption in VBScript using RC4
RC4 decryption with key in Python
您可能会说,这两个脚本都使用非常相似的脚本。但是在尝试解码时似乎都无法正常工作。我还看过其他地方,包括像这样的算法:
https://bytes.com/topic/access/insights/906671-rc4-encryption-algorithm-vba-vbscript
任何人都可以提供帮助吗?最好知道您是否能够成功运行每个功能。理想情况下,目标是使用VBScript运行加密,使用Python获取输出并解密,并获得预期的原始结果。
答案 0 :(得分:3)
问题将是编码。只需查看Python文档chr()
function
从整数返回一个字符(字符串)(代表该字符的 unicode代码点)
而在VBScript中,Chr()
function
返回与指定的 ANSI字符代码
关联的字符
这不是等效的,相反,您需要在VBScript中使用ChrW()
函数。
ChrW为使用Unicode字符的32位平台提供。它的参数是 Unicode(宽)字符代码,从而避免了从ANSI到Unicode的转换。
此外,在返回字符代码时,您将需要使用AscW()
函数而不是Asc()
function函数,后者等效于Python ord()
function。
AscW为使用Unicode字符的32位平台提供。它返回 Unicode(宽)字符代码,从而避免了从Unicode到ANSI的转换。