2009-07-28 48 views
0

背景如何將Javascript AES庫移植到.NET以確保互操作性?

我有我與需要在服務器端進行解密客戶端的JavaScript對數據進行加密。

至於我可以告訴大家,我使用的是不與C#Rijndael算法庫互操作的JavaScript庫AES。

因此,我主要在C#中實現javascript AES來使用。

我要去嘗試將使用的JavaScript器jsc.exe編譯成一個dll,看看反射器能救我一些時間。

我知道,JScript是不一樣的JavaScript,但我希望我能擺脫一些作品awefully接近,只是做手工的touchups。

問題:

當我編譯使用JSC我得到以下錯誤的JavaScript:

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

有問題的行是在下面的代碼行該第一行:

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'); 
     } 
    }, 

而完整的源代碼可以found here

我不確定問題出在哪裏。我也對如何在JavaScript和C#之間加密/解密數據提出建議。

+0

我沒有答案,但我只是好奇你爲什麼不能只使用HTTPS來處理客戶端和服務器之間的加密? – Alconja 2009-07-29 00:03:15

+0

很難說出問題所在,因爲你提供的這條線沒什麼意義,也不是一個完整的陳述。是否有可能添加更多的代碼行? – kanngard 2009-07-29 00:08:20

回答

1

如果你只是想從JavaScript做AES,你有沒有嘗試slowAESIt worked for me.。我發現了slowAES和.NET中的內置Rijndael或AES類之間良好的互操作性。我還發現課程設計很自然,易於使用和理解。這不需要從Javascript移植到JScript。

基於密碼的密鑰派生實際上並不是由SlowAES處理的。如果你需要(可能),那麼我建議the PBKDF2 implementation from Parvez AnandamI also have used that,它很好地工作。

當我測試slowAES加上Anandam的PBKDF2時,它在CBC模式下與C#的RijndaelManaged類有很好的互操作性。

不要被命名爲「slowAES」推遲 - 這是不是真的很慢。它被命名爲「慢」,因爲它是Javascript。

如果您不能使用的東西是乾淨的,像slowAES兼容,然後嘗試JSC編譯器之前,我建議在現有的JavaScript代碼封裝成Windows Script Component。 WSC允許您將腳本邏輯打包爲一個COM組件,它可以被任何支持COM的環境(包括任何.NET應用程序)使用。這裏是a post that shows how to package slowAES as a WSC

由於某些原因,很多人都知道您可以將腳本代碼打包爲COM組件,但它已經存在了10年。這聽起來可能聽起來很不尋常,但是它在擊敗港口。 WSC內部的代碼是Javascript,而不是Javascript.NET。

0

我今天也有這個問題。我偶然發現瞭解決方案。使用package theNameSpace { class Whatever { function func() { return "the results"; } } }