0

我从http://personalsources.com/includes/functions.asp中提取了这段 ASP 代码,并将所有密码编码为 RC4,编码的功能是:

function rc4(byref thestr, byref thekey)
  dim asciiarray(255)
  dim keyarray(255)
  if isnull(thestr) then exit function
  if len(thekey)=0 then exit function
  if len(thestr)=0 then thestr=" "
  if len(thestr)=0 then exit function
  zxlen=len(thekey)
  for ipos=0 To 255
    keyarray(ipos)=asc(mid(thekey, ((ipos) Mod (zxlen)) + 1, 1))
  next
  for ipos=0 To 255
    asciiarray(ipos)=ipos
  next
  vpos=0
  for ipos=0 To 255
    vpos=(vpos + asciiarray(ipos) + keyarray(ipos)) Mod 256
    tempa= asciiarray(ipos)
    asciiarray(ipos)=asciiarray(vpos)
    asciiarray(vpos)=tempa
  next
  ipos=0
  vpos=0
  for rcx=1 To len(thestr)
    ipos=(ipos + 1) Mod 256 
    vpos=(vpos + asciiarray(ipos)) Mod 256
    tempb=(asciiarray(ipos) + asciiarray(vpos)) Mod 256
    tempa=asciiarray(ipos)
    asciiarray(ipos)=asciiarray(vpos)
    asciiarray(vpos)=tempa
    tempc=asciiarray(tempb)
    rc4=rc4 & chr(asc(mid(thestr, rcx, 1)) xor tempc)
  next
end function

你知道我们是否有加密密钥(RC4),所以我们可以很容易地解密密码,但我不知道这个功能是如何加密密码的?这个函数的确切算法是什么?这可以编写一个函数来解密这个 RC4 密码吗?


例如,这个函数的加密密码是这样的(它永远不像 RC4 密码!!!):

>r²çÅÅ
4

3 回答 3

2

RC4 是一个流密码,所以它使用 XOR 来加密。运行 RC4 会产生一个随机的字节密钥流。

要加密你:

明文异或密钥流 -> 密文

要解密你:

密文异或密钥流 -> 明文

在这两种情况下,密钥流都是相同的,由 RC4 使用相同的密钥生成。

于 2012-04-13T10:32:13.270 回答
1

密码未加密,因此您无法解密。

数据已加密。要解密它,您需要密码,并使用加密文本和原始密码(用于加密它的密码)运行相同的功能。

于 2012-04-13T08:55:31.627 回答
0

根据维基百科,解密 RC4 所需要做的就是使用相同的密钥再次运行相同的功能。

于 2012-04-13T08:54:55.817 回答