Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将代码段从c转换为vbscript_C#_Asp.net_Encryption_Asp Classic - Fatal编程技术网

C# 将代码段从c转换为vbscript

C# 将代码段从c转换为vbscript,c#,asp.net,encryption,asp-classic,C#,Asp.net,Encryption,Asp Classic,所以我需要在url上传递一些参数。为了不让url上的id=1,我添加了一个简单的加密方法来混淆这些值。这在.Net领域中运行良好。但是,现在我需要从一个经典的asp页面直接转到这个.net页面,该页面希望对参数进行加密。我真的不太熟悉加密或经典的asp,希望有人能告诉我一个好的JS库,或只是提供一个经典的asp版本的这个功能?如果.Net代码有什么问题,我也很乐意听到反馈 以下是加密方法: public static string Encrypt(string Input) { try

所以我需要在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 "";
    }
}

谢谢你的帮助

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


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

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

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

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


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

并非要回答我自己的问题,但我无法将代码添加为注释。无论如何,我最终还是在客户端实现了RC4。对于可能感兴趣的任何人,您是否在经典asp中工作??:以下是相关代码-希望对您有所帮助!和往常一样,如果有人发现这个片段有问题,请告诉我

谢谢

马特


谢谢你的意见。我曾考虑过这样做,但在IIS x64下运行时,访问自定义com组件时遇到问题。是否有人可以确认这是否可行,以及在x64下实现是否有任何特殊考虑?您可以访问x64中的自定义COM+组件。我不知道它们是否是自定义步骤,但这是可能的。我们有一些遗留代码来完成这项工作。进入编译选项,在“高级”下,专门针对x64的CPU进行尝试,然后确保它设置为注册COM互操作。一旦我这样做了,我还没有遇到问题。此外,我还发现使用.NET部署可以更好地注册DLL,尽管我也创建了BAT文件,手动引用了regasm命令。感谢提供的其他信息,我一定会尝试并发布结果。虽然我最终没有进行此更改,我觉得这最终可能是最好的解决方案。听起来是一个明智的方法,只是有点全面满足我目前的需求。我希望能找到一些不需要我来实现所有这些的东西——但也谢谢你的反馈!
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