私はしばらく base64 エンコーディングを使用してきましたが、一部のデコーダーが簡単に識別できるため、安全ではありません。
では、データを保護する独自のメカニズムを開発したり、暗号化アルゴリズムを作成したりすることは良い考えですか? もしそうなら、自作の暗号化コードはどのように見えますか?
私はしばらく base64 エンコーディングを使用してきましたが、一部のデコーダーが簡単に識別できるため、安全ではありません。
では、データを保護する独自のメカニズムを開発したり、暗号化アルゴリズムを作成したりすることは良い考えですか? もしそうなら、自作の暗号化コードはどのように見えますか?
いいえ、独自のメカニズムを開発してデータを保護したり、独自の暗号化アルゴリズムを作成したりすることはお勧めできません。
そこは専門家に任せるべきです。それが、あなたがここでその質問をしている理由でもあります。この場合、自分自身を信頼しないように、自分の内なる声に耳を傾けてください。
(私は、あなたが好きなことを何でもできるとは言いたくないし、あなたの学習を止めたくありません。実稼働環境での実用的なガイドラインのために、暗号化、特に独自のアルゴリズムの開発は、高いだけではありません。 -それ自体が芸術であり、頻繁に発生する可能性のあるばかげた間違いを確実に起こさないようにする方法も常に問題です。)
Cookie 内のデータを暗号化する必要があることを明確にしたので、最初に尋ねる質問は、その理由です。代わりにセッション変数に保持できるこのデータはありますか?
私が考えることができる唯一のことは、覚えているパスワードや、Cookie から読み取れないことを完全に確認したいその他の機密資格情報を保存している場合です。転送時のセキュリティが懸念される場合 (誰かがネットワークからデータを傍受する可能性がある)、HTTPS を使用する必要があります。
そうは言っても、phpには、さまざまな種類の実績のある暗号のラッパーであるmcryptがあります。これらの場合、一般的な経験則では、使用するビット数が多いほど良いため、CBC モードを採用して ECB を回避する必要があります。
mcrypt-encrypt関数について読むことから始め、mcrypt-decrypt で値を復号化します。
誰でも php でエンコーダーを作成できます。いくつかのタイプのチップが最も理解しやすいですが、壊れやすいため、単純なユーザーから何かを保護しようとしている場合や学習したい場合に使用することはお勧めしません。識別が少し難しくなるという点で、ある程度のセキュリティを構築する方法は、少しセキュリティのためにサイパーを調べたり、サイパーを調整したりすることができます。
つい最近、基本を理解したいと思っている人と話していたので、バイナリ値操作に基づいて作成しました。
遊んだり、少し勉強したりする以外の目的でこれを使用しないでください
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を使用することは理解しにくいことを知っています。これは単純な関数呼び出しではありませんが、それを使用すると、データがはるかに安全になります。