【问题标题】:How to encrypt/encode an array in an url friendly format better than using serialize and base64如何比使用序列化和 base64 更好地以 url 友好格式加密/编码数组
【发布时间】:2012-05-29 15:41:59
【问题描述】:

我目前正在使用此代码从 Intranet 服务器生成 .xls 文件中的超链接。

这个 .xls 文件是我通过电子邮件提交给我的一个供应商的订单。

/* WEBSERVER1 */  
$ORDER=$_GET['ORDER'];
$EZAB=$_GET['EZAB'];
$IP=$_GET['IP'];

$ARRAY = array(
    "ORDER" => $ORDER,
    "EZAB" => $EZAB,
    "IP" => $IP);

$SERIAL=serialize($ARRAY);
$q=base64_encode($SERIAL);
$URL="http://mywebsite/?q=".$q
$EXCELHYPERLINK='=hyperlink("'.$URL.'")';

我希望我的供应商单击 .xls 文件中的链接以确认订单已处理,而不是回复原始电子邮件。

无法从外部访问 Intranet 服务器,链接指向托管以下代码的网络服务器。

/* WEBSERVER2 */
$q=$_GET['q'];
$SERIAL=base64_decode($q);
$ARRAY=unserialize($SERIAL);
// Do something...

我宁愿不使用数据库。

你有什么想法可以让“$KEY”的内容不那么容易被发现吗?

【问题讨论】:

  • 你试过 Mcrypt 吗? php.net/manual/en/book.mcrypt.php
  • base_64不会美化,它是一种(糟糕的)加密形式。
  • 你真的需要美化链接 url: 或者仅仅设置链接文本就足够了,比如“点击这里确认!”......例如=HYPERLINK("google.co.uk","Click这里访问谷歌")
  • 谢谢@dAm2K Mycrypt 会成功的。
  • Base64 用于编码,而不是加密

标签: php arrays serialization base64 mcrypt


【解决方案1】:

mcrypt 允许我加密通过 GET 传输的数据。 (感谢@dAm2K)

base64_encode 不足以使加密的日期 URL 变得友好,因为它包含(“+”、“/”和“=”字符)(感谢 @DavidThomas)

我用 str_replace 替换了这 3 个字符,一切正常。

这是内网服务器的更正代码:

/* WEBSERVER1 */  
$ORDER=$_GET['ORDER'];
$EZAB=$_GET['EZAB'];
$IP=$_GET['IP'];

$ARRAY = array(
    "ORDER" => $ORDER,
    "EZAB" => $EZAB,
    "IP" => $IP);

$SERIAL=serialize($ARRAY);
$M=mcrypt_module_open('rijndael-256','','cbc','');
$KEY=md5("gi7aesawde2zomspgo8guvivmer8oici");
$IV=md5("dob1depatodop7lipdaig7bebeaion9d");
mcrypt_generic_init($M,$KEY,$IV);
$ENCRYPTEDDATA=mcrypt_generic($M,$SERIAL);
mcrypt_generic_deinit($M);
mcrypt_module_close($M);
$q=base64_encode($ENCRYPTEDDATA);
$q=str_replace(array('+','/','='),array('-','_','.'),$q);

$URL="http://mywebsite/?q=".$q;
$EXCELHYPERLINK='=hyperlink("'.$URL.'")';

对于网络服务器:

/* WEBSERVER2 */
$q=$_GET['q'];
$q=str_replace(array('-','_','.'),array('+','/','='),$q);
$ENCRYPTEDDATA=base64_decode($q);
$M=mcrypt_module_open('rijndael-256','','cbc','');
$KEY=md5("gi7aesawde2zomspgo8guvivmer8oici");
$IV=md5("dob1depatodop7lipdaig7bebeaion9d");
mcrypt_generic_init($M,$KEY,$IV);
$SERIAL=mdecrypt_generic($M,$ENCRYPTEDDATA);
mcrypt_generic_deinit($M);
mcrypt_module_close($M);
$ARRAY=unserialize($SERIAL);

// Do something...

【讨论】:

    猜你喜欢
    • 2017-12-20
    • 2016-02-14
    • 2021-12-06
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2011-09-17
    • 2016-05-07
    • 2017-11-30
    相关资源
    最近更新 更多