2009-08-12 46 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