这篇文章诞生之前,特别感谢博友
小李同学的提醒

收到建议,我便开始搜寻加密评论区用户头像的方法
摸爬滚打总算是解决了,同时也把方法分享给其他有需要的朋友
谷歌了一下其他大佬的解决方法,规则之树大佬提供了两个方法
参考资料:https://www.ruletree.club/archives/1566/
1.第一种则是获取json数据进行分割得出k值再进行重组
function Authorimg($email)
{
$a='cdn.v2ex.com/gravatar';//gravatar头像源
$b=str_replace('@qq.com','',$email);//替换qq邮箱
if(stristr($email,'@qq.com')&&is_numeric($b)&&strlen($b)<11&&strlen($b)>4){
$nk = 'http://ptlogin2.qq.com/getface?&imgtype=1&uin='.$b;//qq头像api
$q = file_get_contents($nk);//读入文件
$q = json_encode($nk);//编码json
$k = explode("&k=",$q)[1];//分割出k值
echo 'https://q.qlogo.cn/g?b=qq&k='.$k.'&s=100';//重组
}else{
$email= md5($email);
echo 'https://'.$a.'/'.$email.'?';
}
}
2.第二种获取HTTP请求所发送的标头的数组,不用读入整个文件不会影响效率
function Authorimg($email)
{
$a='cdn.v2ex.com/gravatar';//gravatar头像源
$b=str_replace('@qq.com','',$email);
if(stristr($email,'@qq.com')&&is_numeric($b)&&strlen($b)<11&&strlen($b)>4){
$nk = 'https://s.p.qq.com/pub/get_face?img_type=3&uin='.$b;
$c = get_headers($nk, true);
$d = $c['Location'];
$q = json_encode($d);
$k = explode("&k=",$q)[1];
echo 'https://q.qlogo.cn/g?b=qq&k='.$k.'&s=100';
}else{
$email= md5($email);
echo 'https://'.$a.'/'.$email.'?';
}
}
预装主题之后,确实可以实现,但是介于自己的Amigo朋友圈主题模版首页样式需要加载很多评论头像
使用这两个方法,加载首页的时间就很长了
一个头像需要花费一秒的时间,如果首页的头像较多,这个问题将会是致命的
可能加载一个首页就需要长达一分钟两分钟的时间将评论头像全部加载出来,对于博友的访问体验是大打折扣的
再寻他法
因为自己的Gravatar头像源一直使用的是,cravatar的源,于是去cravatar官网去碰碰运气
在官网的开发文档看到了这句话,于是灵感油然而生
Cravatar 完美兼容所有 Gravatar 头像 API 接口,同时如果你未在 Cravatar 设置头像,则会先尝试调用 Gravatar 上的头像数据,其后是 QQ 头像,最后会返回我们为你准备的一组默认头像
这句话简单讲述的是cravatar会首先查询你的邮箱,是否有注册Gravatar头像
如果没有就返回其QQ头像,如果也不是QQ邮箱则返回cravatar的默认头像
那么,反过来想,我们是否可以将QQ邮箱通过cravatar来处理,从而达到加密QQ用户头像呢?
经过亲自检验,是可以的,cravatar的头像链接显示格式是这样的
https://cravatar.cn/avatar/HASH
其中 HASH 部分是你的电子邮箱的哈希值,此电子邮箱必须在 Cravatar.cn 上注册并绑定头像
否则会尝试返回 Gravatar 头像和 QQ 头像,如果都不存在,则返回默认头像
那么我们只需要将取到的邮箱值,通过php加密一下,可恶,没有系统学习过php
不过还好,自己有过js基础,编程语言总是万变不离其宗,所以一番折腾还是写出来了
这里主要用到PHP strtolower() 函数和 md5()函数
大致思路
将获取的email的值,判断是否为QQ邮箱还是域名邮箱,如果是域名邮箱则直接加密然后返回值
如果是QQ邮箱,则通过strtolower() 函数进行转换为小写,再md5加密,然后返回头像
代码展示
因为是小白,可能写的有些问题
function Authorimg($email)
{
$a='cravatar.cn/avatar';//gravatar头像源
$b=str_replace('@qq.com','',$email);
if(stristr($email,'@qq.com')&&is_numeric($b)&&strlen($b)<11&&strlen($b)>4){
$address = strtolower( trim( $email ) );
$hash = md5( $address );
$qqimgurl = 'https://cravatar.cn/avatar/' . $hash;
return $qqimgurl;
}else{
$email= md5($email);
$avatarimgurl = 'https://'.$a.'/'.$email.'?';
return $avatarimgurl;
}
}
这样只需要在前端引用一下就好了
<?php Authorimg($comments->mail); ?>
这样QQ用户头像加密功能,就实现了

pigeon主题用户
如果你是pigeon主题用户,可以直接下载下面链接的feature.php文件
https://cloud.usj.cc/d/Onedrive/%E4%BB%A3%E7%A0%81/feature.php
然后进入你的主题文件,找到 /libs/feature.php文件直接覆盖替换即可
如果你是Twitter用户,直接在主题目录的function.php的第47行的位置将 Yoniu:取Gravatar头像 部分的代码替换到如下代码
//Yoniu:取Gravatar头像
function getGravatar($email, $s = 40, $d = 'mm', $g = 'g') {
if(preg_match('|^[1-9]\d{4,11}@qq\.com$|i',$email)){
$address = strtolower( trim( $email ) );
$hash = md5( $address );
$qqimgurl = 'https://cravatar.cn/avatar/' . $hash;
return $qqimgurl;
}else{
$hash = md5($email);
$option = Typecho_Widget::widget('Widget_Options');
if($option->gravatarURL){
$avatar = $option->gravatarURL."/$hash?s=&d=$d&r=$g";
}else{
$avatar = "//gravatar.com/avatar/$hash?s=&d=$d&r=$g";
}
return $avatar;
}
}
这样就可以了
有没有好的办法去防止评论区冒充 ::douyin:19::
好像有方法 但是涉及到数据库 我不会 你可以问问大佬们 ::bqb:zhoumei::
可以学锦的博客里,加一个防伪数字码字段,hah~
::bqb:dz::
根本就不用我水一篇 你这直接概括全了 ::douyin:17::
::face:yb:: 嘿嘿 你说不想发技术文 我就重新编辑放在后面了 不过pigeon作者昨天下午已经更新了 ::face:fx::
技术博主,石锤了!!!
::face:cdx:: 我小白 只是一点小发现
拿走拿走!!! ::douyin:17::
没问题 ::face:380::
新主题看着确实不错,特别是在电脑端展示 ::bqb:niupi::
哈哈 谢谢 ::face:yb::
打分:A
::face:yb:: 酸q
之前都是用现成的API确实没考虑过加密问题。
不过那时候我的思路是获取QQ头像缓存到本地,直接本地头像就不会显示QQ号码 了哈哈。
但是这个方法会加大主题文件哎 不过也确实是一个可行的办法
加密问题还是要重视一下 避免有心之人 ::face:cdx::
令人怀念的主题 ::face:wuyu::
马上新版本发布 不换回来吗 ::douyin:21::
知道啦,蛮期待的,如果可以我会把tuiwen.me用在这个主题,太符合了简直 ::face:wuyu::
tuiwen.me看着不错诶,注册个看看 ::arunew:aru-1::
早就拥有了 ::face:382::
你们两个不在一个频道 他是注册你的那个tuiwen的用户 ::douyin:30::
哈哈哈哈 ::face:371::
赵桑,加个Q吗 ::arunew:aru-100::
加密还是比较好的,谈不上保护,但是不加密别有用心的人会采集到。
确实就是防有心之人,之前没考虑到这个问题
你要是叫自己小白,那我得叫自己小黑了 ::douyin:19::
哈哈 过奖了 有pigeon主题成品哦 直接替换就可以使用了 这个问题作者一直没修 我今天花了点时间 整了一下
玩博客的大家都有注册g头像吧!
Gravatar头像基本上是主流,但是大部分的博友使用的QQ头像,使用QQ头像就会暴露一些隐私问题,所以才有了这篇文章,算是发出来一起学习吧,可能有朋友觉得这个问题不算什么,就怕有用心之人拿来发送大量的垃圾邮件,真的是很烦人
这个折腾可以有,做多种尝试未尝不可,只有满足预定的期望就好
哈哈 折腾其实也是一次学习
:&(蛆音娘_吃惊)主题还得挺快啊,刚刚还没变
什么 发生了什么? ::douyin:74::
不要晃我,刚刚都500了 ::douyin:50::
刚刚在帮博友 把pigeon主题的评论区头像加密一下 所以暂时换了主题 测试 所以你刚刚看了我换了主题 ::douyin:38::
关于头像加密还有个有趣的事 pigeon的作者就被一个人diss了 说他没给头像加密 然后巴拉巴拉一堆
我猜你是说这个博主吧 哈哈 还写了一篇文章dis 不过这个老哥的博客权重很高啊 还排在第一 话说现在pigeon最新版本头像加密了吗
https://guihet.com/pigeon.html
好像没有吧 我刚才看好像看得到账号
我去看了 确实是 但是这个作者说的有点过激了
![]()
你这图片要限制一下大小啊 起飞了啊
他的行为我觉得是有必要的提醒 过激可能是遇到过什么情况
现在加密了! ::douyin:19:: 现在 cravatar.cn 直接支持解析QQ头像了!
好像是哎,那他岂不是白忙活了 ::douyin:38::
没有吧 我看了的 昨天下午 他发了新版才加密 应该是才弄得
::douyin:17:: 我是小小白,我看不懂你的,所以我关了handsome的解析,选择cravatar
不过我看你博客的QQ头像都加密了 handsome主题作者本身已经处理了
handsome好像没加密,有个解析qq头像的开关,打开之后,就不是加密了,我现在关了,默认用cravatar的解析规则,所以现在是加密了
handsome的功能还是全一些 毕竟是typecho的模版的大哥大 ::face:cdx::
强仔早期早已弄过,不过比较鸡肋🐔,正经人谁看你评论者的QQ ::arunew:aru-226::
所以说 这就是给不正经的人弄得
冷知识:通过QQ可以社工信息 ::douyin:61::
那个库多老了,说的我QQ信息很重要似的,
赵桑,求科普下,社工信息是什么 ::douyin:26::
如果我没记错的话 你是小吴吗
哈哈,挺不好意思的 ::douyin:42::
没有什么不好意思的 你中考结束了吧 考得不错吧
离我最想考的那个 差5分 不过,这个还算可以 能上里面的实验班
不错哟 ::douyin:17::
::douyin:74:: 职业捧场人