<?php /** * 卡信息的加密和解密 * 加密解密时使用的$key为:substr(str_pad(您的用户名, 8, '0'), 0, 8),即您的用户名(注意是用户名,不是openid)的前8位(不足8位则以0补齐) */ class encrypt { /** * 加密 * @param string $str 待加密的字符串 * @param string $key 密码 * @return string */ public function encode($str, $key) { $key = substr($key, 0, 8); $iv = $key; $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_ECB); $str = $this->pkcs5Pad($str, $size); $s = mcrypt_encrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB, $iv); return base64_encode($s); } /** * 解密 * @param string $str 待解密的字符串 * @param string $key 密码 * @return string */ public function decode($str, $key) { $iv = $key; $str = base64_decode($str); $str = mcrypt_decrypt(MCRYPT_DES, $key, $str, MCRYPT_MODE_ECB, $iv); $str = $this->pkcs5Unpad($str); return $str; } public function pkcs5Pad($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text.str_repeat(chr($pad), $pad); } public function pkcs5Unpad($text) { $pad = ord($text{strlen($text) - 1}); if ($pad > strlen($text)) return false; if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) return false; return substr($text, 0, -1 * $pad); } /** * 加密(可用于PHP7) * @param string $str 待加密的字符串 * @param string $key 密码 * @return string */ public function encode7($str, $key) { $encrypted = openssl_encrypt($str, 'DES-ECB', $key, OPENSSL_RAW_DATA); return base64_encode($encrypted); } /** * 解密(可用于PHP7) * @param string $str 待解密的字符串 * @param string $key 密码 * @return string */ public function decode7($str, $key) { $encrypted = base64_decode($str); $decrypted = openssl_decrypt($encrypted, 'DES-ECB', $key, OPENSSL_RAW_DATA); return $decrypted; } } /* 测试加密和解密 */ $encrypt = new encrypt(); var_dump($encrypt->encode('1', '12345678')); var_dump($encrypt->encode7('1', '12345678')); echo '<hr/>'; var_dump($encrypt->decode('g6AtgJul6q0=', '12345678')); var_dump($encrypt->decode7('g6AtgJul6q0=', '12345678'));