加解密字符串

	/**
     * 字符串加密方法
     * @param string $data 要加密的字符串
     * @param string $key  加密密钥
     * @param int $expire  过期时间 (单位:秒)
     * @return string 
     * @author v_zhkkzhang张凯(jackzhang)
     */
    public function string_encrypt($data, $key, $expire = 0) {
        $key  = md5($key);
        //进行BASE64编码
        $data = base64_encode($data);
        $x    = 0;
        $len  = strlen($data);
        $l    = strlen($key);
        $char = '';
        for ($i = 0; $i < $len; $i++) {
            if ($x == $l) $x=0;
            $char .= substr($key, $x, 1);
            $x++;
        }
        //设置时间一共输出10位,不足10位前面补0
        $str = sprintf('%010d', $expire ? $expire + time() : 0);
        for ($i = 0; $i < $len; $i++) {
            //以ASCII码的形式将字符串和新生成的字符串求和后返回一个十进制数
            $str .= chr(ord(substr($data,$i,1)) + (ord(substr($char,$i,1)))%256);
        }
        return str_replace(array('+', '/', '='), array('-', '_', ''), base64_encode($str));
    }


    /**
     * 字符串解密方法
     * @param string $data 要解密的字符串 (必须是string_encrypt方法加密的字符串)
     * @param string $key  加密密钥
     * @return string 
     * @author v_zhkkzhang张凯(jackzhang)
     */
    public function string_decrypt($data, $key){
        $key    = md5($key);
        $data = str_replace(array('-', '_'), array('+', '/'), $data);
        $mod4 = strlen($data) % 4;
        if ($mod4) {
            $data .= substr('====', $mod4);
        }
        $data = base64_decode($data);
        $expire = substr($data, 0, 10);
        $data = substr($data, 10);

        if ($expire > 0 && $expire < time()) {
            return '';
        }
        $x = 0;
        $len = strlen($data);
        $l = strlen($key);
        $char = $str = '';

        for ($i = 0; $i < $len; $i++) {
            if ($x == $l) $x = 0;
            $char .= substr($key, $x, 1);
            $x++;
        }

        for ($i = 0; $i < $len; $i++) {
            if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) {
                $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1)));
            } else {
                $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1)));
            }
        }
        return base64_decode($str);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
里提供了三种Python中常用的解密字符串的方法:DES、RSA和AES。 1. DES解密: 使用Crypto.Cipher库中的DES模块,需要注意的是,密钥必须为8位或16位bytes类型,密文本必须为8的倍数。具体代码实现可以参考引用中的DesUtil类。 2. RSA解密: 使用rsa库进行解密,需要生成公钥和私钥,具体代码实现可以参考引用中的rsacrypt类。 3. AES解密: 使用pycryptodome库中的AES模块,需要注意的是,密钥必须为16、24或32位bytes类型,密文本可以为任意长度。具体代码实现可以参考以下示例: ``` from Crypto.Cipher import AES import base64 class AesUtil(): """ AES解密 """ key = b'1234567890123456' # 密钥 16、24或32位bytes类型 iv = b'1234567890123456' # 初始向量 16位bytes类型 def __init__(self): self.aes = AES.new(self.key, AES.MODE_CBC, self.iv) # 创建一个AES实例 def pad(self, text): """ 密函数,如果text不是16的倍数,那就补足为16的倍数 :param text: :return: """ while len(text) % 16 != 0: text += b' ' return text def encrypt(self, text): padded_text = self.pad(text) encrypted_text = self.aes.encrypt(padded_text) # 把密后的字符串转化为base64编码的字符串 return base64.b64encode(encrypted_text).decode() def decrypt(self, text): # 先把base64编码的字符串转化为bytes类型 encrypted_text = base64.b64decode(text.encode()) decrypted_text = self.aes.decrypt(encrypted_text).rstrip(b' ') return decrypted_text.decode() aes = AesUtil() enc = aes.encrypt(b"我是一个兵!") print("密后:%s" % enc) dec = aes.decrypt(enc) print("解密后:%s" % dec) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值