我目前正处理数据,我想暂时将其作为加密数据存储在我的数据库中。我并不担心数据库被黑客攻击,我只是想确保输入数据的人不能通过他们自己访问。 (当然还有我)
数据并不是永久存储在数据库中,因为我使用他们的API将其导出到第三方应用程序,但由于它们有速率限制,我需要将数据存储在数据库中,直到限制为止我可以上传它。 (假设出现费率限制)
过程:
我从表单收到的请求是在一个数组中,所以首先我序列化()数组以得到一个长字符串,稍后我会反序列化()。 然后我想使用一种方法,让我将字符串转换为数字,然后再转回而不会丢失信息。
我想将数据转换为数字的原因是因为我使用的HashIds库只编码数字。据我所知,这是一个额外的安全层,我很乐意添加。
在此处阅读有关HashIds的更多信息:http://hashids.org/
我尝试过:
我尝试将字符串转换为十六进制数字,然后将十六进制数字转换为小数。不幸的是,这个数字太大了,我没有运气使用biginteger。
base64_encode(),它不会将数据转换为数字,但随后将它们转换为base_convert。但我无法弄清楚php中的基本转换,因为它显然很奇怪。
结论:
如何将我从表单请求接收的数据转换为短编码字符串,可以将其转换回数据而不会有太多麻烦?我还不太清楚PHP提供的所有选项。
更新
为了结束这个线程,我最终使用OpenSSL来加密我的序列化数组。我遇到的唯一问题是,如果请求包含一个文件,我将无法将其序列化并将对象保存到数据库中。我仍然需要解决这个问题,因为第三方应用程序希望该文件是multipart / formdata对象,我不能将文件路径保存到数据库并上传它。但我想我以后必须弄明白。
答案 0 :(得分:0)
该链接http://hashids.org/提供了一个非常明确的例子。让我们假设你的整数是15
。
$hashids = new Hashids\Hashids('some random string for a salt. Make sure you use the same salt if you want to be able to decode');
$encoded = $hashids->encode(15);
print_r(['hashedId' => $encoded]);
$decoded = $hashids->decode($hashed);
print_r(['decoded' => $decoded]);
因此$decoded
的值应该等于15
<强>更新强>
抱歉 - 你问题的hashids
位告诉我,因此,我误解了你的要求。我会更新我的回答:
您应该使用https://secure.php.net/openssl_encrypt和https://secure.php.net/manual/en/function.openssl-decrypt.php