-
做了一个网站,套的别人的模板,页面最上方有个联系电话、地址信息等,其中有一个联系邮箱。
-
这个邮箱是使用加密算法加密过的,页面展示的时候,再使用对应的解密算法解密,这样html的源码中就不存在邮箱地址的明文信息了。
-
用来防止爬虫爬取,保护邮箱地址隐私性比较有帮助。看了一下还挺有意思,就保留了这个功能。
-
但是要更换邮箱地址就比较麻烦了,要么去找对应网站的生成器(CMS)系统,要么就得自己做。
-
对于技术人员来说,当然是自己做个加密算法了。
-
这是一个cloud-flare提供的解密算法(在html中引入static/js/email-decode.min.js)
-
邮箱地址的格式是这样的:
-
<a href=“” class=“cf_email” data-cfemail=“2e434f5c454b5a6e424f404c4b47454b4447004d4143”>[email protected]</a>
-
通过观察发现,data-cfemail应该是邮箱的加密地址。
-
那么我们只要做一个算法,加密之后得到的字符串使用同样的逻辑可以解密就行了。
-
直接上代码,以后再有类似的问题,直接使用这个算法就行了。
// 解码加密后的邮箱地址
function decodeEmail($encode): string
{
$k = hexdec(substr($encode, 0, 2));
for ($i = 2, $m = ''; $i < strlen($encode) - 1; $i += 2) {
$m .= chr(hexdec(substr($encode, $i, 2)) ^ $k);
}
return $m;
}
// 加密指定的邮箱地址。(用来更换网页的邮箱地址)
function encodeEmail($email, $key = 0): string
{
$chars = str_split($email);
$string = '';
$key = $key ? $key : rand(10, 99);
foreach ($chars as $value) {
$string .= sprintf("%02s", dechex(ord($value) ^ $key));
}
return dechex($key) . $string;
}
//echo encodeEmail("abc@abc.com") . "\n";
//echo deCFEmail("2e434f5c454b5a6e424f404c4b47454b4447004d4143") . "\n";
评论区