以前におれおれ関数で可逆暗号化を公開したことあったけど(http://zeijaku.net/bloghistory/?search=201111281403)、当然のことながらコードを解析すれば元には戻せる。
ついでに言うと特定の条件だと暗号化後の末尾が特定文字に偏ったりすることがあったりした。
とは言ってもぱっと見で分からないのと、強度を上げればいいやと思ってとりあえずいいか~と放置してたけどやっぱりちょっと気になったので少し手を加えてみた。
暗号化Ver1.1
/*
* *************************************
* CRYPT ENCODE Method Ver.1.1
* *************************************
* [機能]
* 文字列を暗号化する
* [引数]
* @param string $val 暗号化したい文字列
* [返り値]
* @return string $crypttarget 暗号化した文字列
/
function encode($val)
{
$crypttarget = '';
$CRYPTSTRENGTH = '2'; // 暗号強度
$CRYPTKEY = crypt($CRYPTSTRENGTH);
$assenble = strlen($val);
for($i = 0; $i < $assenble; $i++)
{
$crypttargetarray[$i] = substr($val, $i, 1);
$keyarray[$i] = substr(crypt($CRYPTKEY), mtrand("1", strlen(crypt($CRYPTKEY)) - 1), 1);
$crypttarget .= $keyarray[$i] . $crypttargetarray[$i];
}
$length = intval($CRYPTSTRENGTH);
for($j = 0; $j < $length; $j++)
{
$crypttarget = base64encode($crypttarget);
}
$crypttarget = bin2hex($crypttarget);
return $crypt_target;
}
/
* *************************************
* CRYPT DECODE Method Ver1.1
* *************************************
* [機能]
* 文字列を復号化する
* [引数]
* @param string $val 復号化したい文字列
* [返り値]
* @return string $decrypttarget 復号化した文字列
*/
function decode($val)
{
$decrypttarget = '';
$CRYPTSTRENGTH = '2'; // 復号強度
$val = pack("H*", $val);
$length = intval($CRYPTSTRENGTH);
for($i = 0; $i < $length; $i++)
{
$val = base64decode($val);
}
$assenble = strlen($val);
for($j = 0; $j < $assenble; $j++)
{
if( ($j % 2) != 0 )
{
$decrypttarget .= substr($val, $j, 1);
}
}
return $decrypt_target;
}
関連記事