最佳的电子邮件地址混淆方法

7

我正在创建一个应用程序,需要在查询字符串中传递电子邮件地址,并在公共文档中链接到这些页面。

为了防止我的网站成为垃圾邮件机器人的天堂,我正在寻找一种简单的算法(最好是JavaScript),以加密/混淆地址,使其可以在URL中公开使用,而不会让电子邮件地址成为易受攻击的目标。

例如

www.mysite.com/page.php?e=bob@gmail.com
 to
www.mysite.com/page.php?e=aed3Gfd469201

最好的结果应该是一个长度适中的字符串,可以轻松用于 URL。你有什么算法推荐吗?

2
客户端必须解密电子邮件吗?您必须知道'aed3Gfd469201'代表的是'bob@gmail.com',但客户端必须使用bob的电子邮件吗? - Frankie
5个回答

8
使用与仅由您的站点持有的私钥相对应的公钥对数据进行RSA加密。
对结果进行Base64编码和urlencode处理。

1
这是唯一“安全”的方法。你可以做一些简单的事情,比如ROT13等,这些对大多数垃圾邮件机器人来说很容易愚弄,但你知道……如果有人编写了自定义的垃圾邮件机器人,那么这些方法就很容易被克服。 - thomasrutter
RSA对我的需求来说有点过于繁重了。我不需要完全“保护”电子邮件,我只需要确保它受到垃圾邮件机器人的保护,并且(最好)不像ytf@reger.com这样的丑陋的rot-13电子邮件。 - MarathonStudios
2
那么跳过加密步骤,直接对字符串进行base64编码。 - Paul Sasik

4

您可以编写一个简单的函数,将每个字符值与某个整数进行异或运算,并生成十六进制编码字符串。(电子邮件地址不包含非ASCII字符,因此不会与多字节字符产生复杂性)。例如:

obfusc = function(s, c) {
  c = c || 0x7f;
  r = "";
  for (i in s) {
    valh = (s.charCodeAt(i) ^ c).toString(16);
    if (valh.length == 1) valh = "0" + valh;
    r += valh;
  };
  return r;
}

deobfusc = function(s, c) {
  c = c || 0x7f;
  r = "";
  for (var i=0; i<(s.length/2); i++) {
    r += String.fromCharCode(parseInt(s.substr(i*2, 2), 16) ^ c)
  };
  return r;
}

addr = "joe@example.com";
x = obfusc(addr);
alert(addr + " -> " + x + " -> " + deobfusc(x))

// joe@example.com -> 15101a3f1a071e120f131a511c1012 -> joe@example.com

1

我想到了一些选项:)

  • moc.liamg@bob
  • ob@gmail.comb
  • bobX@gmail.com(其中X是常数)
  • mob@gmail.cob

0

那么用sha256对电子邮件进行简单的哈希处理如何?


6
你如何再次获取那封电子邮件? - Borealid
我曾经考虑过这个问题,但后来我遇到了Borealid的领悟。 - MarathonStudios

0
最简单的方法就是将电子邮件地址存储在数据库表中,并传递一个键/ID字段,当您想要实际发送电子邮件时,在该点查找该字段。

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