base64需要修改

时间:2012-12-03 07:08:51

标签: php base64

base64的问题

$data = 'my data';
echo $encryptedData = base64_encode($data);

//输出: bXkgZGF0YQ ==

我在令牌

中添加了更多字符
$encryptedData = $encryptedData . 'sdfsdfasdfsd';
echo $data = base64_decode($encryptedData);

//输出: 我的数据〜Ç_jÇ_±

现在我得到了实际的数据+垃圾数据。如果令牌有任何变化,我不想要任何数据仅数据。有什么方法可以实现这个吗?

2 个答案:

答案 0 :(得分:2)

你应该在编码时添加令牌而不是解码

$data = 'my data'.'sdfsdfasdfsd';
$encryptedData = base64_encode($data);

echo $data = base64_decode($encryptedData);

并删除令牌

$trimmed = rtrim($data, "sdfsdfasdfsd");
echo $trimmed;

Codepad

并且正如Jon Skeet所说,base64绝不是加密的。它根本不会使内容变得秘密

答案 1 :(得分:1)

要确保只能通过更改$data来更改base64编码字符串,您需要添加验证令牌。

添加此类验证的一种简单方法是使用密钥哈希,密钥是秘密的:

$data = 'this product sells for 5 dollars';
$enc = base64_encode($data);
$token = base64_encode(hash_hmac('sha256', $enc, 'your secret key here', true));

$my_token = $token . ':' . $enc;

输出:

ZMkqZIa6UazMhbYDiPqjdS1NmU1ulh+Gi2tgWHRKKpQ=:dGhpcyBwcm9kdWN0IHNlbGxzIGZvciA1IGRvbGxhcnM=

当您收到此类令牌时,首先拆分:,然后使用第一部分(键控哈希)验证第二部分(数据)的内容。只有匹配时,您才能(相对)确定数据未被篡改。