2009-04-14 66 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]