【发布时间】:2019-06-14 23:46:51
【问题描述】:
我有file1.php & file2.php,在file1.php 有一些链接,例如:
<a href="http://google.com/">Open google site</a>
<a href="http://facebook.com/">Open facebook site</a>
我尝试在file1.php 上进行安全链接,我正在使用此功能进行加密
function enc_safelink($url_target){
$key = '1q2w3e4r5t';
$iv = mcrypt_create_iv(
mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC),
MCRYPT_DEV_URANDOM
);
$encrypted = base64_encode(
$iv .
mcrypt_encrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
$url_target,
MCRYPT_MODE_CBC,
$iv
)
);
return $encrypted;
}
所以file1.php 上的所有链接都是这样的:
<a href="file2.php?link=D6/thGZQ3MpUf6ePqqDBrXdQC3rAVQHMHGm9KOn6GVjB3CNyDqljwt7DIwkWU6HV">Open google site</a>
<a href="file2.php?link=HYOyBzxnpd1MrzN4YMF1qpWSg4KMlE1mz2HTxOl+ZGdS3zUSQymoMIPoBMVu3Mpm">Open facebook site</a>
在file2.php我想显示一个链接并从参数中获取永久链接
<?php
function dnc_safelink($params_code){
$key = '1q2w3e4r5t';
$data = base64_decode($params_code);
$iv = substr($data, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$decrypted = rtrim(
mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
hash('sha256', $key, true),
substr($data, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC)),
MCRYPT_MODE_CBC,
$iv
),
"\0"
);
return $decrypted;
}
if ( isset($_GET["link"]) ) :
$dnc_url = dnc_safelink($_GET['link']);
echo '<div style="text-align:center" id="aDivSafeLink"><a href="'.$dnc_url.'">Download Here</a></div>';
endif;
?>
但是输出是这样的:
<a href="�uJ�`*���_����gyܥ�w�W�X�#">Download Here</a>
我确定,我已经在同一页面上测试过加密和解密功能可以完美运行。如何使用不同页面或不同站点的字符串加密和解密?
【问题讨论】:
-
是什么阻止你只使用github.com/defuse/php-encryption?
-
你确定
$params_code是解密时的完整链接吗?也许有些字符丢失了。提示:url-safe base64 -
@ArtjomB。哦,我知道了,谢谢你的提示;)
-
如果你已经解决了这个问题,你应该写下你自己的答案并接受它。
标签: php encryption