PHP的sha1问题
怪我咯
怪我咯 2017-04-10 16:07:06
[PHP讨论组]
<?php
$str = "Shanghai";
echo sha1($str,TRUE); //输出的是二进制(160bit,20byte,20个字符)
?>

我想要这20个字符而不是这些二进制的东西有什么简单的办法吗?

说清楚一些:这个函数将输出长度为160bit(也就是20byte)的二进制,其中每8bit的二进制对应ASCII码的一个字符,所以这160bit的二进制对应20个字符,我想要的就是这20个字符。

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
怪我咯

我如果没有理解错,它返回的"二进制"正是你要的东西,你可能掉进了自己想法的陷阱。

这是一段依次输出20个字符的ASCII值的简单程序,简单观察一下就知道很多在非可打印字符(值小于32)和扩展区域(值大于127),在扩展区域的位置对于UTF8和GB系列的编码来说都是利用起来表示多位字节的编码的,所以在这些环境下这个编码区域的单个字节是毫无意义的,也就是会出现乱码了

$x = sha1("Shanghai", true);
for ($i = 0; $i < strlen($x); $i++) {
    echo $x[$i] . "\t" . ord($x[$i]) . "\n";
}

另请参见ASCII表: http://www.ascii-code.com/

怪我咯

楼下请忽略此答案

不知道这个是不是你要的结果:

<?php
$str = 'Shanghai';

echo sha1($str);

参考: http://php.net/manual/en/function.sha1.php

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号