【问题标题】:Convert snippet from c# to vbscript将代码片段从 c# 转换为 vbscript
【发布时间】:2010-11-19 00:32:10
【问题描述】:

所以我有一种情况,我需要在 url 上传递一些参数。为了在 url 上没有 id=1,我添加了一个简单的加密方法来混淆这些值。这在 .Net 领域内运行良好。然而,现在我需要从一个经典的 asp 页面直接指向这个期望参数被加密的 .net 页面。我真的对加密或经典 asp 不太熟悉,希望有人能够指导我找到一个好的 JS lib,或者只是提供这个函数的经典 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 "";
    }
}

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    这不是简单的翻译!经典 ASP 无权访问 .NET Framework。您需要在 Win32 代码中完成所有这些操作。

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

    【讨论】:

    • 感谢您的意见。我曾考虑过这样做,但在 IIS x64 下运行时访问自定义 com 组件时遇到问题。任何人都可以确认这是否可行,以及在 x64 下实施是否有任何特殊考虑?
    • 您可以在 x64 中访问自定义 COM+ 组件。我不知道它们是否是自定义步骤,但有可能。我们有一些遗留代码在做这件事。
    • 进入您的编译选项并在高级下尝试专门针对 x64 的 CPU,然后确保将其设置为注册 COM 互操作。一旦我这样做了,我还没有遇到问题。我还发现使用 .NET 部署在注册 DLL 时效果更好,尽管我也创建了 BAT 文件,手动引用 regasm 命令。
    • 感谢您提供更多信息,我一定会尝试并发布结果。
    • 虽然我最终没有做出这个改变,但我觉得这最终可能是最好的解决方案。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 听起来是一种明智的方法,只是有点无所不包地满足了我目前的需求。我希望找到不需要我实现所有这些的东西 - 但也感谢您的反馈!
    【解决方案3】:

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

    谢谢,

    马特

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-10
      相关资源
      最近更新 更多