将片段从c#转换为vbscript

时间:2009-08-12 16:00:35

标签: c# asp.net encryption asp-classic

所以我有一种情况需要在url上传递一些参数。为了在url上没有id = 1,我添加了一个简单的加密方法来模糊这些值。这在.Net土地上运行良好。然而,现在,我需要从经典的asp页面指向这个期望参数加密的.net页面。我真的不太熟悉加密或经典的asp,并希望有人能够指导我一个好的JS库,或者只是提供这个函数的经典asp版本?如果.Net代码有任何问题,我也很乐意听到有关这方面的反馈。

这是加密方法:

public static string Encrypt(string Input)
{
    try
    {
        key = Encoding.UTF8.GetBytes(EncryptionKey.Substring(0, 8));
        var des = new DESCryptoServiceProvider();
        Byte[] inputByteArray = Encoding.UTF8.GetBytes(Input);
        var ms = new MemoryStream();
        var cs = new CryptoStream(ms, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();
        return Convert.ToBase64String(ms.ToArray());
    }
    catch (Exception)
    {
        return "";
    }
}

这是解密方法(我需要这个来解密经典的asp加密文本):

public static string Decrypt(string Input)
{
    try
    {
        key = Encoding.UTF8.GetBytes(EncryptionKey.Substring(0, 8));
        var des = new DESCryptoServiceProvider();
        var inputByteArray = Convert.FromBase64String(Input);
        var ms = new MemoryStream();
        var cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);
        cs.FlushFinalBlock();

        Encoding encoding = Encoding.UTF8;
        return encoding.GetString(ms.ToArray());

    }
    catch (Exception)
    {
        return "";
    }
}

感谢您的帮助!

3 个答案:

答案 0 :(得分:7)

这不是一些简单的翻译! Classic ASP无法访问.NET Framework。你需要在Win32代码中完成所有这些。

您应该将C#代码打包为一个COM组件,然后可以从Classic ASP站点访问它。

答案 1 :(得分:1)

我在我们的网站上碰到了这个使用ASP& VB.NET。此外,内部实用程序是用C#,VB6和& S编写的。 VB.NET。所有程序都需要能够交换加密数据。

为了解决这个问题,我写了一篇VB6&我转换为.NET的VBScript加密例程。它允许我在平台上拥有相同的数据。加密&我选择的哈希是RC4和MD5。两个版本都通过多种功能得到了显着增强,例如MD5是一个加盐版本,RC4包含CRC检查和使用多个密钥进行双重加密的选项。

这是针对最低限度敏感的数据。对于非常敏感的数据,我编写了一个执行DES-3加密的VB6 DLL。然后,此DLL可供所有平台使用。

我将密码放在注册表中,使用其他加密方法使用硬件参数加密密码。 (如果你从注册表中获取它们并试图将它们放在另一个系统上,它们就不好了。)

答案 2 :(得分:0)

不是故意回答我自己的问题,但我无法将代码添加为评论。无论如何,我最终还是在客户端上实现了RC4。对于任何可能感兴趣的人(你是否正在使用经典的asp工作?:))这是相关的代码 - 希望它有所帮助!与往常一样,如果有人发现此代码段存在问题,请告诉我们!

谢谢,

马特

Dim sbox(255)
Dim key(255)

Sub RC4Initialize(strPwd)
  dim tempSwap
  dim a
  dim b

  intLength = len(strPwd)
  For a = 0 To 255
     key(a) = asc(mid(strpwd, (a mod intLength)+1, 1))
     sbox(a) = a
  next

  b = 0
  For a = 0 To 255
     b = (b + sbox(a) + key(a)) Mod 256
     tempSwap = sbox(a)
     sbox(a) = sbox(b)
     sbox(b) = tempSwap
  Next

End Sub

Function EnDeCrypt(plaintxt)
  dim temp
  dim a
  dim i
  dim j
  dim k
  dim cipherby
  dim cipher

  i = 0
  j = 0

  RC4Initialize "somesortofpassword"

  For a = 1 To Len(plaintxt)
     i = (i + 1) Mod 256
     j = (j + sbox(i)) Mod 256
     temp = sbox(i)
     sbox(i) = sbox(j)
     sbox(j) = temp

     k = sbox((sbox(i) + sbox(j)) Mod 256)

     cipherby = Asc(Mid(plaintxt, a, 1)) Xor k
     dim h
     h = hex(cipherby)
     if Len(h) = 1 then
        h = "0" & h
      end if
     cipher = cipher & h
  Next

  EnDeCrypt = cipher
End Function