我使用 base64 编码已经有一段时间了,它并不安全,因为一些解码器可以轻松识别它。
那么开发自己的机制来保护数据或制作我的加密算法是一个好主意,如果是,那么自制的加密代码是什么样的?
我使用 base64 编码已经有一段时间了,它并不安全,因为一些解码器可以轻松识别它。
那么开发自己的机制来保护数据或制作我的加密算法是一个好主意,如果是,那么自制的加密代码是什么样的?
不,开发自己的机制来保护数据或制作自己的加密算法都不是一个好主意。
你必须把它留给专家。这也是我们看到你在这里问这个问题的原因。倾听你内心的声音,相信自己在这种情况下不要相信自己。
(我不想说你不能为所欲为,我也不想阻止你学习,只是为了生产环境中的实用指南,加密,特别是开发自己的算法,不仅是一个高-艺术本身就是一个问题,如何确保不犯任何经常发生的愚蠢错误也是一个问题。)
既然您已经明确了要加密 cookie 中的数据,那么要问的第一个问题是为什么?这些数据可以保存在会话变量中吗?
我能想到的唯一有意义的事情是,如果您存储了记住我的密码或其他一些您想要完全确定无法从 cookie 中读取的敏感凭证。如果您担心传输的安全性(有人可能会从网络中嗅探数据),那么您应该使用 HTTPS。
话虽如此,php 有 mcrypt,它是许多不同类型的经过验证的密码的包装器。有了这些,一般的经验法则是使用的比特越多越好,并且您希望采用 CBC 模式并避免 ECB。
首先阅读mcrypt-encrypt函数,然后 mcrypt-decrypt 解密该值。
任何人都可以在 php 中构建编码器,有几种类型的芯片是最容易理解的,但是它们很容易被破坏,并且不建议使用它来表示如果你只是想保护一些东西免受简单用户的攻击或者你想学习如何建立一些安全性,因为它使识别变得更加困难,您可以研究 cypers 或调制 cypers 以获得一点安全性。
就在最近,我正在和一个想了解基础知识的人交谈,所以我基于二进制值操作构建了一个,
请勿将其用于玩耍或学习之外的任何用途
class binChar{
function __construct(){
$this->pats = array('0', '1', '00', '11', '000', '111', '0000', '1111', '00000', '11111');
}
function encrypt($str){
$str = str_replace(array("\r", "\n", "\t", " "), array('\r', '\n', '\t', '\s'), $str);
$strN = str_split($str);
$bin = "";
foreach($strN as $char){
$charC = decbin(ord($char));
$count = count((string)$charC);
while($count < 8){
$chars = "0".$charC;
$count++;
}
$bin .= $chars;
}
echo "Given \r\n ".$str." \r\n Binary\r\n".$bin."\r\n";
foreach($this->pats as $key => $pat){
$bin = str_replace($pat, $key, $bin);
}
return $bin;
}
function decrypt($bin){
foreach($this->pats as $key => $pat){
$bin = str_replace($key, $pat, $bin);
}
$str = "";
$chars = str_split($bin, 8);
foreach($chars as $char){
$str .= chr(bindec($char));
}
$str = str_replace(array('\r', '\n', '\t', '\s'), array("\r", "\n", "\t", " "), $str);
return $str;
}
}
$enc = new binChar();
$test = $enc->encrypt("Hello World");
echo "Encrypted\r\n".$test;
echo "\r\nDecrypted\r\n".$enc->decrypt($test);
我再说一遍,除了玩和测试/学习它的工作原理之外,我永远不会建议您将其用于任何其他用途,这只是一些混淆的基本示例。
而且我知道在 php 中使用 AES 不容易理解,它不是一个简单的函数调用,但是使用它可以更好地保护您的数据。