• 一个'&'引起md5签名不一致问题


    有时会遇到这样一个问题,本地和接口在验证数据签名时,明明两端打印出来的两个字符串一模一样,但是md5加密后的两个密文却不一样。
    例如:
    本地字符串:$str = "a=1&b=2&c=3";
    此时将数据请求到接口,接口获取到的数据可能会变成这样:$str = "a=1&b=2&c=3";
    那是因为在html中  '&'  就是  '&',而在浏览器中 '&'  只会显示成  '&' ,所以是看不出两个字符串的差别的,需要打印两个字符串的长度才能发现长度不一样。
    在使用http传输的过程中,'&' 会被替换成  '&'  进行传输。
    这时接口端需要执行 :$str = str_replace("&", "&", $str);
    将 '&' 替换成 '&’'然后才能进行md5加密,否则加密验证是不可能通过的。

    另外,有时会遇到php的md5与linux的md5sum的得到的签名不一致的问题

    PHP签名:php  -r  'echo md5("签名的字符串");'

    Linux签名:echo “签名的字符串” | md5sum

    PHP最终签名的字符串是:签名的字符串

    Linux最终签名的字符串是:签名的字符串

    因为 linux 的 echo 都会自动带上 ,所以导致跟php的md5得到的值不一样。

    此时应该用:echo -n “签名的字符串” | md5sum

    对 echo 加上 -n 参数,让echo在输出字符串时不加上换行符。

  • 相关阅读:
    关于宇宙大爆炸的理论模型
    算法系列2《RSA》
    Codeforces Round #248 (Div. 1)——Nanami's Digital Board
    Cocos2d-x场景变化相关功能介绍
    NYOJ 745 蚂蚁问题(两)
    quick-cocos2d-x endToLua 退出会卡住
    编程算法
    linux基础知识1
    URAL 1553. Caves and Tunnels 树链拆分
    2014/11/13_ 随想
  • 原文地址:https://www.cnblogs.com/LO-gin/p/10072271.html
Copyright © 2020-2023  润新知