2009-04-14 63 views
9

我正在開發一個ASP.NET MVC應用程序,我想在服務器上使用C#加密一個短字符串,並將它發送到客戶端。在.NET和Javascript中的簡單字符串加密

然後在客戶端,它將通過Javascript代碼進行解密。

有關如何實現這一點的任何想法?

你知道一個簡單的加密算法(不必是防彈保護),可以從C#很容易地轉換爲JavaScript或反之亦然?

注:我能做到這一點完全用C#和通過Ajax做解密,但我不希望這樣做,因爲我想減少網站的流量儘可能地。

回答

6

System.Security.Cryptography有一堆對稱(和非對稱)加密算法可以使用。 (對於一些超安全使用aes

你應該能夠找到匹配的Javascript實現大多數(這裏有幾個AES的實現在JS)

注意:如果您打算使用基於私鑰的加密,請記住,您的網頁將嵌入密鑰,這意味着這一切都會變得毫無意義。能夠訪問頁面的人可以進行解密,充其量只會讓屏幕刮板的生命變得更加困難。如果讓屏幕刮板更難以生存是你的目標,你可以使用一個模糊算法。任何微不足道的實現對於沒有javascript引擎的屏幕刮板來說都是非常不切實際的:

例如,

function samObsfucated() 
{ 
    return("s" + "a" + "m" + "@" + "s" + "." + "com"); 
} 

然後onload用這些函數的輸出填充您的電子郵件字段。

的Javascript加密對存儲密碼的用戶ALA clipperz

0

您可以使用HTTPS加密客戶端和服務器之間的所有流量嗎?這可能是您找到的最安全的方法。

+0

我寧可不使用HTTPS,因爲這只是一個簡單的「小冊子」網站,而我正在加密的所有內容都是電子郵件地址,以防止垃圾郵件。 我不想經歷設置HTTPS的麻煩。 – Jonathan 2009-04-14 04:32:18

2

就可能工作的最簡單的事情而言,似乎您想要一種簡單的混淆形式,而不是任何真正安全的形式。

Rot-13可能已經足夠,只要您使用ASCII電子郵件地址處理觀衆。如果你需要支持Unicode,那麼你可能需要一些稍微複雜的東西。

9

這聽起來像你想的混淆或編碼,不加密。 Base64 encoding應該在這裏工作得很好。結果看起來不像電子郵件地址,編碼過程很快。

在C#中,你可以使用:

string emailAddress = "[email protected]"; 
string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(emailAddress)); 

而且你可以使用這個JavaScript函數將其解碼:

function Base64Decode(encoded) { 
    var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/="; 
    var output = ""; 
    var chr1, chr2, chr3; 
    var enc1, enc2, enc3, enc4; 
    var i = 0; 

    do { 
     enc1 = keyStr.indexOf(encoded.charAt(i++)); 
     enc2 = keyStr.indexOf(encoded.charAt(i++)); 
     enc3 = keyStr.indexOf(encoded.charAt(i++)); 
     enc4 = keyStr.indexOf(encoded.charAt(i++)); 

     chr1 = (enc1 << 2) | (enc2 >> 4); 
     chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
     chr3 = ((enc3 & 3) << 6) | enc4; 

     output = output + String.fromCharCode(chr1); 

     if (enc3 != 64) { 
     output = output + String.fromCharCode(chr2); 
     } 
     if (enc4 != 64) { 
     output = output + String.fromCharCode(chr3); 
     } 
    } while (i < encoded.length); 

    return output; 
} 

C#應用程序編碼字符串[email protected]YWJjQGV4YW1wbGUuY29t,和JavaScript版本將YWJjQGV4YW1wbGUuY29t解碼回[email protected]