我需要一种功能的组合:
数组序列化(没有对象,字符串的键值对为3-7,上面没有references)
)
...of数组.
每件事都应该为速度而优化。
对于序列化数组,我考虑使用json_encode()而不是序列化(),因为它更快。见Preferred method to store PHP arrays (json_encode vs serialize)。
对于数据有效性检查,我正在考虑使用sha1(),但是我考虑使用crc32,因为它更快,而且我不认为冲突很近。见Fastest hash for non-cryptographic uses?。
为了加密,我做了:
<?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很有可能无效吗?
是否有一个已经结合了这些功能或其中一些功能的函数?
发布于 2012-01-25 16:44:23
我知道CBC模式更安全,但它也更慢。
而不是欧洲央行?只有在数据超过几个块的情况下。
如果您想要最快的加密算法,那么没有什么可以代替自己来测试它了--奇怪的是,PHP的sha1()实现比它的md5()要快得多(我知道这些都是散列)--这说明性能与算法一样依赖于实现。
你为什么要确认它的价值?如果它是一个加密的数据报,那么内容对用户来说是不透明的--如果他们试图篡改它,那么它很可能无法解压,如果它仍然解压缩,那么解码就会失败,但是在远程情况下,如果这两种情况都没有发生,就应该很容易检查其他修改--即使是嵌入式CRC32看起来也是过火了。
,以便将结果字符串设置为cookie。
听起来你在用很多花哨的加密来掩盖你的应用程序的基本不安全性--它很可能会被重播攻击。另外还有一个复杂的问题,就是确保您的数据符合cookie。为什么不使用带有随机发送客户端值的服务器端会话(如果您想要实现一个记住的me类型函数,并且仍然有一个常规会话,则不必使用PHP会话处理程序)。
发布于 2012-01-25 16:57:27
在我看来,只使用压缩就足够了。要逆向工程压缩,需要很长时间。我可以推荐哈夫曼压缩。
https://stackoverflow.com/questions/9004919
复制相似问题