侧边栏壁纸
博主头像
钱学超博主等级

火星人,1万小时法则的忠实拥趸。技术宅,象棋和羽毛球爱好者,马拉松PB成绩:4小时零8分。坚持认为算法是计算机的灵魂。喜欢解决问题,喜欢手工,喜欢与朋友们聊天喝酒吹牛X。

  • 累计撰写 81 篇文章
  • 累计创建 447 个标签
  • 累计收到 88 条评论
标签搜索

目 录CONTENT

文章目录

cloud-flare邮箱加密、解密算法

钱学超
2022-12-01 / 0 评论 / 0 点赞 / 496 阅读 / 475 字 / 正在检测是否收录...
  1. 做了一个网站,套的别人的模板,页面最上方有个联系电话、地址信息等,其中有一个联系邮箱。

  2. 这个邮箱是使用加密算法加密过的,页面展示的时候,再使用对应的解密算法解密,这样html的源码中就不存在邮箱地址的明文信息了。

  3. 用来防止爬虫爬取,保护邮箱地址隐私性比较有帮助。看了一下还挺有意思,就保留了这个功能。

  4. 但是要更换邮箱地址就比较麻烦了,要么去找对应网站的生成器(CMS)系统,要么就得自己做。

  5. 对于技术人员来说,当然是自己做个加密算法了。

  6. 这是一个cloud-flare提供的解密算法(在html中引入static/js/email-decode.min.js)

  7. 邮箱地址的格式是这样的:

  8. <a href=“” class=“cf_email” data-cfemail=“2e434f5c454b5a6e424f404c4b47454b4447004d4143”>[email&#160;protected]</a>

  9. 通过观察发现,data-cfemail应该是邮箱的加密地址。

  10. 那么我们只要做一个算法,加密之后得到的字符串使用同样的逻辑可以解密就行了。

  11. 直接上代码,以后再有类似的问题,直接使用这个算法就行了。

// 解码加密后的邮箱地址
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";

0

评论区