.NET和Javascript中的简单字符串加密

我正在开发一个ASP.NET MVC应用程序,其中我想使用C#加密服务器上的短字符串,并将其发送到客户端。

然后在客户端,它将通过Javascript代码解密。

有关如何实现这一点的任何想法?

您是否知道一种简单的加密算法(不必是防弹安全的),可以很容易地从C#转换为Javascript,反之亦然?

注意:我可以在C#中完全执行此操作并通过Ajax进行解密,但我不希望这样做,因为我希望尽可能减少网站流量。

System.Security.Cryptography有一堆准备使用的symetric(和asymetric)加密算法。 (对于超级安全的东西使用aes )

您应该能够找到大多数匹配的Javascript实现(这里是JS中的一些aes实现)

注意:如果您计划使用基于私钥的加密,请记住,您的网页将嵌入密钥,这意味着一切都变得毫无意义,因为任何有权访问该页面的人都可以进行解密,充其量你会让屏幕刮刀的生命变得更加困难。 如果让屏幕刮板生活更加艰难,那么您的目标就是使用遮挡算法。 对于没有javascript引擎的屏幕抓取工具,任何简单的实现都会非常不切实际:

例如。

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

然后onload使用这些函数的输出填充您的电子邮件字段。

Javascript加密有一个非常好的用例,用于存储用户ala clipperz密码的软件

听起来你想要一个混淆或编码,而不是加密。 Base64编码应该在这里运行良好。 结果看起来不像电子邮件地址,编码过程很快。

在C#中,您可以使用:

 string emailAddress = "abc@example.com"; string encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(emailAddress)); 

您可以使用此JavaScript函数对其进行解码:

 function Base64Decode(encoded) { var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 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#应用程序将字符串abc@example.com编码为YWJjQGV4YW1wbGUuY29t ,JavaScript版本将YWJjQGV4YW1wbGUuY29t解码回abc@example.com

简单的XOR密码怎么样?

这两个实现是完全兼容的:

  • 简单的XOR加密 (C#)
  • JavaScript XOR加密

就可能起作用的最简单的事情而言,似乎你想要一种简单的混淆forms,而不是任何真正安全的东西。

只要您使用ASCII电子邮件地址与受众群体打交道, Rot-13就足够了。 如果您需要支持Unicode,那么您可能需要更复杂的东西。

您可以使用HTTPS加密客户端和服务器之间的所有流量吗? 这可能是您将找到的最安全的方法。