2009-08-12 10 views
0

So habe ich eine Situation, wo ich einige Parameter auf URL übergeben muss. Um ID = 1 auf der URL nicht zu haben, fügte ich eine einfache Verschlüsselungsmethode hinzu, um die Werte zu verschleiern. Dies hat innerhalb des .Net-Landes gut funktioniert. Jetzt muss ich jedoch von einer klassischen ASP-Seite zu dieser .net-Seite wechseln, die erwartet, dass die Parameter verschlüsselt werden. Ich bin wirklich nicht vertraut mit Verschlüsselung oder klassischen Asp und hoffte, dass jemand in der Lage wäre, mich zu einer guten JS lib zu leiten, oder einfach eine klassische asp-Version dieser Funktion zur Verfügung stellen? Wenn irgendetwas mit dem .Net-Code nicht stimmt, würde ich gerne Rückmeldungen dazu hören.Snippet von C# in VBScript konvertieren

Hier ist die Verschlüsselungsmethode:

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

Und hier ist die Entschlüsselungsmethode (Ich brauche dies die klassische asp verschlüsselten Text zu entschlüsseln):

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

Vielen Dank für jede Hilfe!

Antwort

0

Ich meine nicht meine eigene Frage zu beantworten, aber ich konnte den Code nicht als Kommentar hinzugefügt . Wie auch immer, am Ende habe ich RC4 auf dem Client implementiert. Für alle, die daran interessiert sind (machst du Arbeit in klassischen Asp ?? :)) Hier ist der relevante Code - hoffe es hilft! Wie immer, wenn jemand ein Problem mit diesem Snippet entdeckt, lass es mich wissen!

Danke,

Matt

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

Dies ist keine einfache Übersetzung! Klassischer ASP hat keinen Zugriff auf das .NET Framework. Sie müssten dies alles in Win32-Code tun.

Sie sollten den C# -Code zusammen als eine COM-Komponente verpacken, auf die dann von der klassischen ASP-Site zugegriffen werden kann.

+0

Vielen Dank für die Eingabe. Ich dachte darüber nach, dies zu tun, aber ich hatte Probleme beim Zugriff auf benutzerdefinierte com-Komponenten bei der Ausführung unter IIS x64. Kann jemand bestätigen, dass dies möglich ist oder nicht machbar ist, und wenn es spezielle Überlegungen für die Implementierung unter x64 gibt? –

+0

Sie können auf benutzerdefinierte COM + -Komponenten in x64 zugreifen. Ich weiß nicht, ob es benutzerdefinierte Schritte sind, aber es ist möglich. Wir haben etwas älteren Code, der es tut. – Jab

+0

Gehen Sie in Ihre Kompilierungsoptionen und versuchen Sie unter Advanced speziell für CPU-Targeting x64 und stellen Sie dann sicher, dass es für COM Interop registriert ist. Ich habe noch ein Problem, nachdem ich das getan habe. Außerdem habe ich festgestellt, dass die Verwendung einer .NET-Bereitstellung die Registrierung der DLLs verbessert, obwohl ich auch BAT-Dateien erstellt habe, die die regasm-Befehle manuell referenzieren. – RiddlerDev

1

Ich lief in diesem auf unserer Website, die ASP & VB.NET verwendet. Auch interne Dienstprogramme sind in C#, VB6 & VB.NET geschrieben. Alle Programme müssen in der Lage sein, verschlüsselte Daten auszutauschen.

Um dieses Problem zu behandeln, schrieb ich eine VB6 & VBScript-Verschlüsselungsroutine, die ich in .NET konvertiert. Es ermöglicht mir, identische Daten über die Plattformen hinweg zu haben. Die Verschlüsselung & Hashing, die ich ausgewählt habe, waren RC4 und MD5. Beide wurden erheblich mit mehreren Features verbessert, wie der MD5 ist eine gesalzene Version und die RC4 enthält eine CRC-Prüfung und eine Option für die doppelte Verschlüsselung mit mehreren Passschlüsseln.

Dies ist für die minimal sensiblen Daten. Für die Daten, die sehr empfindlich sind, schrieb ich eine VB6 DLL, die eine DES-3 Verschlüsselung durchführt. Diese DLL wird dann für alle Plattformen verfügbar gemacht.

Ich habe die Passschlüssel in der Registrierung, verschlüsselt mit Hardware-Parameter für das Passwort mit einer anderen Verschlüsselungsmethode. (Wenn Sie sie aus der Registrierung und versuchen, sie auf ein anderes System zu bringen, sind sie nicht gut.)

+0

Klingt nach einem vernünftigen Ansatz, nur ein bisschen allumfassend für meine Bedürfnisse derzeit. Ich hatte gehofft, etwas zu finden, bei dem ich nicht alles umsetzen musste - aber danke auch für das Feedback! –