• php使用openssl进行Rsa长数据加密(117)解密(128) 和 DES 加密解密


    PHP使用openssl进行Rsa加密,如果要加密的明文太长则会出错,解决方法:加密的时候117个字符加密一次,然后把所有的密文拼接成一个密文;解密的时候需要128个字符解密一下,然后拼接成数据。

    加密:

    /**
         * 加密
         * @param $originalData
         * @return string|void
         */
        /*function encrypt($originalData){
    
            // if (openssl_private_encrypt($originalData, $encryptData, $this->rsaPrivateKey)) {
            if (openssl_public_encrypt($originalData, $encryptData, $this->rsaPublicKey)) {
                return base64_encode($encryptData);
            } else {
                return false;
            }
        }*/
        function encrypt($originalData){
    
            $crypto = '';
    
            foreach (str_split($originalData, 117) as $chunk) {
    
                openssl_public_encrypt($chunk, $encryptData, $this->rsaPublicKey);
    
                $crypto .= $encryptData;
            }
    
            return base64_encode($crypto);
        }
    

    解密:

    /**
         * 私钥解密
         * @param $encryptData
         */
    
        /*function decrypt($encryptData){
    
            // if (openssl_public_decrypt(base64_decode($encryptData), $decryptData, $this->rsaPublicKey)) {
            if (openssl_private_decrypt(base64_decode($encryptData), $decryptData, $this->rsaPrivateKey)) {
    
                return $decryptData;
    
            } else {
    
                return false;
            }
        }*/
        function decrypt($encryptData){
    
            $crypto = '';
    
            foreach (str_split(base64_decode($encryptData), 128) as $chunk) {
    
                openssl_private_decrypt($chunk, $decryptData, $this->rsaPrivateKey);
    
                $crypto .= $decryptData;
            }
    
            return $crypto;
        }
    

    DES 加密解密:

    function encrypt($encrypt,$key){
    
    	$passcrypt = mcrypt_encrypt(MCRYPT_DES ,$key, $encrypt, MCRYPT_MODE_CBC, $key);
    
    	$encode = base64_encode($passcrypt);
    
    	return $encode;
    
    }
    
    function decrypt($decrypt,$key){
    
    	$decoded = base64_decode($decrypt);
    
    	$decrypted = mcrypt_decrypt(MCRYPT_DES ,$key, $decoded, MCRYPT_MODE_ECB, $key);
    
    	return $decrypted;
    }
    

    AES 加密解密

    //为 CBC 模式创建随机的初始向量
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
    
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    
    function aesEncrypt($encrypt, $key, $iv){
    
    	$passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_128 ,$key, $encrypt, MCRYPT_MODE_CBC, $iv);
    
    	//将初始向量附加在密文之后,以供解密时使用
    	$passcrypt = $iv . $passcrypt;
    
    	//对密文进行 base64 编码
    	$encode = base64_encode($passcrypt);
    
    	return $encode;
    
    }
    
    function aesDecrypt($decrypt, $key, $iv_size){
    
    	$decoded = base64_decode($decrypt);
    
    	//初始向量大小,可以通过 mcrypt_get_iv_size() 来获得
    	$iv_dec = substr($decoded, 0, $iv_size);
    
    	//获取除初始向量外的密文
    	$decoded = substr($decoded, $iv_size);
    
    	//可能需要从明文末尾移除 0
    	$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128 , $key, $decoded, MCRYPT_MODE_ECB, $iv_dec);
    
    	return $decrypted;
    }
    

      

  • 相关阅读:
    javascript 读取内联之外的样式(style、currentStyle、getComputedStyle区别介绍) (转载)
    JS笔记2 --定义对象
    JS笔记1
    Chrome 中的 JavaScript 断点设置和调试技巧 (转载)
    屏蔽移动端浏览器的长按事件
    移除IOS下按钮的原生样式
    HTML5中的Range对象的研究(转载)
    js中的 window.location、document.location、document.URL 对像的区别(转载)
    html中插入flash代码详解(转载)
    关于获取各种浏览器可见窗口大小(转载)
  • 原文地址:https://www.cnblogs.com/roam/p/5974061.html
Copyright © 2020-2023  润新知