礼品卡的解密方法

<?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'));


登录 后可发表评论

    最新发布
    聚合数据©版权所有