2009-08-12 44 views
0

所以我有一个情况,我需要传递一些参数上的网址。为了在网址上没有id = 1,我添加了一个简单的加密方法来混淆这些值。这在.Net域内运行良好。然而,现在我需要从一个经典的asp页面指向这个期望参数被加密的.net页面。我真的不太熟悉加密或经典的ASP,并希望有人能够指导我一个很好的JS库,或者只是提供一个经典的ASP版本的这个功能?如果.Net代码有任何问题,我也很想听到有关这方面的反馈。从c#转换片段到vbscript

这里的加密方法:

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 ""; 
    } 
} 

感谢您的帮助!

回答

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 
7

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

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

+0

感谢您的输入。我曾考虑过这样做,但在IIS x64下运行时遇到了自定义com组件的问题。任何人都可以证实这是或不是可行的,如果在x64下有什么特别的考虑? – 2009-08-12 16:11:22

+0

您可以访问x64中的自定义COM +组件。我不知道他们是否是自定义步骤,但它是可能的。我们有一些遗留代码。 – Jab 2009-08-12 16:50:24

+0

进入您的编译选项,并在高级尝试专门针对x64的CPU,然后确保它设置为注册COM Interop。 一旦我做完了,我还没有问题。另外我发现使用.NET部署在注册DLL时效果更好,但我也创建了BAT文件,并手动引用了regasm命令。 – RiddlerDev 2009-08-12 17:51:00

1

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

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

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

我把密钥放在注册表中,使用另一种加密方法使用密码的硬件参数加密。 (如果你从注册表中获得它们并尝试将它们放到另一个系统上,那么它们就不好。)

+0

听起来像一个明智的做法,只是有点全面包括我目前的需求。我希望能找到一些不需要我实现所有这些的东西 - 但也要感谢反馈! – 2009-08-12 18:21:53