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

11
我正在开发一个ASP.NET MVC应用程序,其中我想使用C#在服务器上加密一个短字符串并将其发送到客户端。然后,在客户端通过JavaScript代码进行解密。
您有什么想法来实现这个功能吗?您是否知道一个简单的加密算法(不必非常安全),可以轻松地从C#转换为JavaScript或反之亦然?
注意:我可以完全使用C#完成此操作,并通过Ajax进行解密,但我希望尽可能减少网站流量。
6个回答

10

看起来你想要混淆或编码,而不是加密。 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


10

6

System.Security.Cryptography拥有许多对称(和非对称)加密算法可供使用。(如果需要超级安全,请使用aes

您应该能够找到大多数匹配的JavaScript实现(这里有一些JS中的AES实现)

注意:如果您计划使用基于私钥的加密,则需要注意,您的网页将嵌入密钥,这意味着任何有访问权限的人都可以解密,最好的情况是,您只会使屏幕抓取器的生活变得更加困难。如果您的目标是使屏幕抓取器的生活更加困难,您可以使用混淆算法。任何简单的实现都会使没有JavaScript引擎的屏幕抓取器非常不实用:
例如:
function samObsfucated()
{
    return("s" + "a" + "m" + "@" + "s" + "." + "com");
}

然后在页面加载时,使用这些函数的输出填充电子邮件字段。
JavaScript加密对于存储用户密码的软件有非常好的用例,比如clipperz

2

就最简单的可能性而言,似乎您想要一种简单的混淆形式,而不是真正安全的东西。

Rot-13 可能已经足够了,如果您处理的是 ASCII 电子邮件地址的受众。如果您需要支持 Unicode,则可能需要稍微复杂一些的东西。


0
非常简单的函数,
function Encrypt(value) 
{
  var result="";
  for(i=0;i<value.length;i++)
  {
    if(i<value.length-1)
    {
        result+=value.charCodeAt(i)+10;
        result+="-";
    }
    else
    {
        result+=value.charCodeAt(i)+10;
    }
  }
  return result;
}
function Decrypt(value)
{
  var result="";
  var array = value.split("-");

  for(i=0;i<array.length;i++)
  {
    result+=String.fromCharCode(array[i]-10);
  }
  return result;
} 

0

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


我宁愿不使用HTTPS,因为这只是一个简单的“宣传册”网站,我要加密的只是电子邮件地址,以防止垃圾邮件。我不想费力设置HTTPS。 - Jonathan
你试图保护数据免受谁的侵害? - JoshBerke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接