数组的压缩+编码+检查+序列化的最快组合是什么


What is the fastest combination of compression + encoding + checking + serialization of an array?

我需要一个函数组合,它可以:

  • 数组序列化(没有对象,小-3-7个键值对的字符串,没有引用)
  • 上面的数据有效性检查(哈希在数组内更好吗?)
  • 上述加密(是否有任何加密方法可以验证解密的信息?)
  • 上面的压缩(我不确定成本是否值得:带宽/CPU时间)

数组的。

一切都应该针对速度进行优化。

对于序列化数组,我考虑使用json_encode()而不是serialize(),因为它更快。请参阅存储PHP数组的首选方法(json_encode vs serialize)。

对于数据有效性检查,我曾考虑使用sha1(),但我正在考虑crc32,因为它更快,而且我认为碰撞不会很近。请参阅非加密用途的最快哈希?。

对于我制作的加密:

<?php
function encode($pass, $data) {
  return mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB);
}
function decode($pass, $data) {
  return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $pass, $data, MCRYPT_MODE_ECB);
}
$rand = str_repeat(rand(0, 1000), 5);
$start = microtime(true);
for($i = 0; $i <= 10000; $i++){
  encode('pass', $rand);
}
echo 'Script took ' . (microtime(true) - $start) . ' seconds for encryption<br/>';
$start = microtime(true);
for($i = 0; $i <= 10000; $i++){
  encode('pass', $rand);
}
echo 'Script took ' . (microtime(true) - $start) . ' seconds for decryption';

结果是:

Script took 1.8680129051208 seconds for encryption
Script took 1.8597548007965 seconds for decryption

我宁愿避免任何随意性。我知道CBC模式更安全,但也更慢。

对于压缩,我不知道使用什么更好,因为得到的字符串是二进制的并且很短。

是否有任何压缩不需要编码就可以将结果字符串设置为cookie?我知道例如sha1()只返回数字和字母。

这是一个复杂的问题。因此,请随意指出任何错误或不准确的地方。它包含许多主题,但基本上简短的问题是如何安全快速地加密/解密数组,同时对其进行较小的表示

这是正确的顺序吗?

考虑到结果JSON很可能在数据被更改的情况下无效?

有没有一个函数已经组合了这些函数或其中的一些函数?

我知道CBC模式更安全,但也更慢

欧洲央行?仅当数据超过几个块时。

如果你想要最快的加密算法,那么没有什么可以代替你自己测试它——有点奇怪的是,PHP的sha1()实现比它的md5()快得多(我知道这些都是散列——这是为了说明性能与算法一样取决于实现)。

你为什么要放弃它?如果它是一个加密的数据报,那么内容对用户来说是不透明的-如果他们试图篡改它,那么它很可能无法解压缩,在不太可能的情况下,它仍然解压缩,然后解码将失败,但在远程情况下,这两种情况都不发生,应该很容易检查其他修改-即使是嵌入式CRC32似乎也太过分了。

以便将结果字符串设置为cookie

听起来你正在使用大量花哨的加密来掩盖应用程序的基本不安全性——它很可能会受到重放攻击。此外,您还需要确保您的数据符合cookie。为什么不使用一个服务器端会话,并在客户端发送一个随机值(如果你想实现一个记住我类型的函数,并且仍然有一个传统的会话,那么你不必使用PHP会话处理程序)。

在我看来,只使用压缩就足够了。要对压缩进行逆向工程,需要很长时间。我可以推荐哈夫曼压缩。