2009-07-28 3 views
0

Hintergrund:Wie kann ich eine JavaScript AES-Bibliothek nach .NET portieren, um die Interoperabilität zu gewährleisten?

ich Daten, die ich auf der Client-Seite mit Javascript verschlüsselt, die auf der Serverseite entschlüsselt werden muss.

Soweit ich das beurteilen kann, ist die Javascript-AES-Bibliothek Ich bin mit Bibliothek nicht Interop mit der C# Rijndael.

Also, ich bin im Wesentlichen das Javascript AES in C# für den Einsatz zu implementieren.

Ich werde versuchen, das mit Hilfe von Javascript jsc.exe in eine DLL zu kompilieren und sehen, ob Reflektor mir etwas Zeit sparen kann.

Ich bin mir bewusst, dass jscript nicht das gleiche wie Javascript ist, aber ich hoffe, dass ich mit etwas davonkommen kann, das awefully funktioniert, und nur die Touchups manuell tun.

Problem:

Wenn ich kompilieren JavaScript mit JSC ich die folgende Fehlermeldung erhalten:

error JS1234: Only type and package definitions are allowed inside a library

Die Codezeile ist diese erste Zeile in den folgenden Codezeilen:

var GibberishAES = (function(){ 
    var Nr = 14, 
    /* Default to 256 Bit Encryption */ 
    Nk = 8, 
    Decrypt = false, 

    enc_utf8 = function(s) 
    { 
     try { 
      return unescape(encodeURIComponent(s)); 
     } 
     catch(e) { 
      throw 'Error on UTF-8 encode'; 
     } 
    }, 

    dec_utf8 = function(s) 
    { 
     try { 
      return decodeURIComponent(escape(s)); 
     } 
     catch(e) { 
      throw ('Bad Key'); 
     } 
    }, 

und die volle Quelle found here sein kann:

Ich bin mir nicht sicher, was das Problem ist. Ich bin auch offen für Vorschläge, wie Sie Daten zwischen Javascript und C# verschlüsseln/entschlüsseln können.

+0

Ich habe keine Antwort, aber ich bin nur neugierig, warum Sie nicht nur HTTPS verwenden können, um mit der Verschlüsselung zwischen Client und Server umzugehen? – Alconja

+0

Es ist schwer zu sagen, was das Problem ist, da die von Ihnen angegebene Zeile nicht viel Sinn ergibt und keine vollständige Aussage ist. Ist es möglich, dass Sie weitere Codezeilen hinzufügen? – kanngard

+0

@Alconja: Leider habe ich * keine * Kontrolle über die Verwendung von SSL zwischen dem Client und dem Server. Einige Clients richten SSL ein, andere nicht. Daher müssen alle sensiblen Daten auf der Client-Seite zur Übertragung verschlüsselt werden. @kanngard: Okay, ich habe aktualisiert und einen Link zur vollständigen js-Datei hinzugefügt. Danke! – Alan

Antwort

1

Wenn Sie nur AES von Javascript tun möchten, haben Sie slowAES versuchen? It worked for me.. Ich fand gute Schnittstellen zwischen slowAES und den integrierten Rijndael- oder AES-Klassen in .NET. Auch ich fand, dass das Klassendesign natürlich und einfach zu verwenden und zu verstehen war. Dies würde keine Portierung von Javascript auf JScript erfordern.

Kennwortbasierte Schlüsselableitung wird von SlowAES nicht wirklich gehandhabt. Wenn Sie das (wahrscheinlich) brauchen, dann empfehle ich the PBKDF2 implementation from Parvez Anandam. , und es funktioniert gut.

Als ich slowAES gekoppelt mit Anandam PBKDF2 getestet hatte, hatte es gute Interoperabilität mit C# RijndaelManaged Klasse, im CBC-Modus.

Lassen Sie sich nicht durch den Namen "slowAES" abschrecken - es ist nicht wirklich langsam. Es heißt "langsam", weil es Javascript ist.

Wenn Sie nicht etwas verwenden können, das sauber und kompatibel ist wie slowAES, dann würde ich empfehlen, den vorhandenen Javascript-Code in eine Windows Script Component zu packen. Mit dem WSC können Sie Skriptlogik als COM-Komponente verpacken, wo sie von jeder COM-fähigen Umgebung einschließlich jeder .NET-Anwendung verwendet werden kann. Hier ist a post that shows how to package slowAES as a WSC.

Aus irgendeinem Grund nicht viele Menschen sind sich bewusst, dass Sie Skriptcode als COM-Komponente verpacken kann, aber es ist schon seit 10 Jahren. Es mag für Sie ungewöhnlich klingen, aber es ist besser, den Port zu machen. Der Code innerhalb des WSC ist Javascript, nicht Javascript.

+0

Danke für die Vorschläge! Ich landete bei der Kugel und machte den Hafen. Überraschenderweise war es nicht besonders schlecht mit Hilfe des Debuggers. Ich habe mit der von Ihnen vorgeschlagenen WSC-Methode herumgeworfen, aber ich hatte Angst vor der Leistung. – Alan

0

Ich hatte dieses Problem heute auch. Ich stolpere zufällig über die Lösung.Verwenden Sie package theNameSpace { class Whatever { function func() { return "the results"; } } }

Verwandte Themen