gpt4 book ai didi

php - 这个基于异或的加密函数安全吗?

转载 作者:可可西里 更新时间:2023-10-31 23:52:19 24 4
gpt4 key购买 nike

我在这里尝试做的是创建一个函数,每次调用时将相同的输入加密为完全不同的输出。此函数的基础是异或,但要防止容易发现字符串中的重复模式。我添加了基于时间和字符串部分的随机散列,以在解密时进行 self 验证。

我所要求的是,如果我在这里犯了任何类型的错误,可能会向有经验的人显示隐藏的文本,而无需对字符串进行暴力破解。(我知道 php 有一个仅用于加密的模块,但这是一个糟糕的版本,以防加密模块不可用。)第二:我不要求你重写这个函数或为我写一些东西,我要求的是简单的指导我做错了什么。我知道一个可能的安全漏洞是我默认使用 salsa,它对空字符串全为零,但优点是这是 php 中可用的最长哈希,其次,哪个傻瓜会使用空密码来保护他们的数据?

function crapt($str,$pass,$hmac = false,$meth = 'salsa20') {
$hash = pack('H*',($hmac===false) ? hash($meth,$pass) : hash_hmac($meth,$pass,$hmac));
$str = gzdeflate($str,9);
$tmphash = pack('H*',sha1(sin(microtime(1))));
$str = $tmphash.((string)$str ^ (string)str_repeat($tmphash,strlen($str)/strlen($tmphash)+1));
$str .= pack('H*',sha1($str));
return (string)$str ^ (string)str_repeat($hash,strlen($str)/strlen($hash)+1);
}

function decrapt($str,$pass,$hmac = false,$meth = 'salsa20') {
$hash = pack('H*',($hmac===false) ? hash($meth,$pass) : hash_hmac($meth,$pass,$hmac));
$str = (string)$str ^ (string)str_repeat($hash,strlen($str)/strlen($hash)+1);
$check = substr($str,-20);
$str = substr($str,0,strlen($str)-20);
if(pack('H*',sha1($str))!==$check) return false;
$tmphash = substr($str,0,20);
$str = substr($str,20);
return gzinflate((string)$str ^ (string)str_repeat($tmphash,strlen($str)/strlen($tmphash)+1));
}

var_dump(decrapt(crapt('sometext','secretpassword'),'secretpassword'));

最佳答案

您自己发明的任何密码无疑都存在漏洞 - 如果 Stack Overflow 上的我们这些人无法检测到它,那并不意味着其他人不会。密码学的第一条规则是不要发明自己的密码:使用现有的密码,并在可能的情况下使用众所周知且经过测试的实现。如果您绝对不能使用标准库,请实现现有密码,例如 TEA - 或者更好的是,以您选择的语言找到现有的实现。

关于php - 这个基于异或的加密函数安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4522931/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com