以前に暗号化と復号化についての記事を書きましたが、安全のために、PHP で最も安全な暗号化として認識されている Triple des (3DES) の順方向および逆方向の暗号化と復号化関数を作成しました。 PHP にはそのような既製の関数が用意されていないのが残念なので、3DES バージョンのメソッドを作成しました。このバージョンでは、ECB モードを使用し、PKCS7 補数と Base64 を使用します。通常、この機能を使用する場合、キーを変更するだけで済みます。
テスト:
echo (des3crypt( "龙哥blog",'ENCODE'));
echo "
";
echo (des3crypt( "bxC46TETFEZFpTS1DClzpg==",'DECODE'));
echo "
";
/**
* 暗号化および復号化関数
* @param $str
* @param $type
* @param $key
*/
function des3crypt($str,$type = 'ENCODE',$key = 'AXNU7SLKJ7HKJm+x4bfBJSJQKde'){
if(empty($str) && $str != 0){
return false;
}
$td = mcrypt_module_open( MCRYPT_3DES, ”, MCRYPT_MODE_ECB, ”);
$key =base64_decode($key);
mcrypt_generic_init($td, $key,'12345678');
if(strtoupper($ type) == 'ENCODE'){
$str = padding( $str );
$data = mcrypt_generic($td, $str);
}elseif(strtoupper($type) == 'DECODE'){
$ str =base64_decode($str);
$data = mdecrypt_generic($td, $str);
}
//暗号化
mcrypt_generic_deinit($td);
//End
mcrypt_module_close($td);
if(strtoupper( $type) == 'ENCODE'){
$data = RemoveBR(base64_encode($data));
}elseif(strtoupper($type) == 'DECODE'){
$data = RemovePadding($data);
}
$data を返す;
}
//パディング文字を削除
functionremovePadding( $str ){
$len = strlen( $str );
$newstr = “”;
$str = str_split($str);
for ($i = 0; $ i < $len; $i++ ){
if (!in_array($str[$i],array(chr(0),chr(1),chr(3),chr(4), chr(5),chr(6),chr(7),chr(8)))){
$newsstr .= $str[$i];
}
}
return $newsstr;
}
//パスワードをパディング、8 の倍数にパディング、pkcs7 | pkcs5
function padding( $str ,$pkcs = 5){
if($pkcs == 5){
$pad = 8 – (strlen($str) % 8);
$str .= str_repeat(chr($pad), $pad);
}elseif($pkcs == 7){
$len = 8 – strlen( $str ) % 8;
for ( $ i = 0; $len; $i++ ){
$str .= chr( 0 );
}
}
$str ;
}
/**
* http://52blogger.com 転載は歓迎です。違反した場合は調査の対象となります。*/
function RemoveBR( $str ){
$len = strlen( $str );
$newstr = “”;
$str = str_split($str);
for ($i = 0 ; $i < $i++ ){
if ($str[$i] != 'n' および $str[$i] != 'r'){
$newstr .= $str[$私 ];
}
}
$newsstr;
}
を返します