1.DES是对称加解密算法 虽然不对称加密解决了用对称加密传递消息必须传递密钥的问题,但是由于不对称加密无法使用流进行处理, 因此与对称加密相比效率较低,不适用于加密大量数据的场合。 在实际应用中,一般将两种加密方法配合使用。 其基本思想是:用不对称加密算法加密对称加密算法的密钥,用对称加密算法加密实际数据。 接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令, 然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据, 从服务器返回数据也是通过这个口令加密数据,由app端解密数据。 1.获取口令算法(RSA,非对称加解密算法) 接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令, 然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据, 从服务器返回数据也是通过这个口令加密数据,由app端解密数据。
class RSA { /** * 公钥和私钥可以在线生成测试 */ private $private_key_path='rsa_private_key.pem'; private $public_key_path='rsa_public_key.pem'; public function __construct() { extension_loaded('openssl') or die('php需要openssl扩展支持'); (file_exists($this->private_key_path) && file_exists($this->public_key_path)) or die('密钥或者公钥的文件路径不正确'); $this->privateKey = openssl_get_privatekey(file_get_contents($this->private_key_path)); /** * 生成Resource类型的公钥,如果公钥文件内容被破坏,openssl_pkey_get_public函数返回false */ $this->publicKey = openssl_get_publickey(file_get_contents($this->public_key_path)); ($this->privateKey && $this->publicKey) or die('密钥或者公钥不可用'); } public function encode($originalData) { openssl_public_encrypt($originalData, $encryptData, $this->publicKey); return $encryptData; } public function decode($encryptData) { openssl_private_decrypt($encryptData, $decryptData, $this->privateKey); return $decryptData; } }
2.正式接口调用时的对称加解密接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令,然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据,从服务器返回数据也是通过这个口令加密数据,由app端解密数据。class Mcrypt_DES { function encrypt($input, $key) { $input = serialize($input); $key = md5($key); $key = sha1(substr($key,0,strlen($key)/2), true) . sha1(substr($key,strlen($key)/2), true); // $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $td = mcrypt_module_open('des', '', 'ecb', ''); $key = substr(md5($key), 0, mcrypt_enc_get_key_size($td)); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $encrypted_data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); return trim(chop(base64_encode($encrypted_data))); } function decrypt($input, $key) { $input = trim(chop(base64_decode($input))); // $td = mcrypt_module_open('tripledes', '', 'ecb', ''); $td = mcrypt_module_open('des', '', 'ecb', ''); $key = md5($key); $key = sha1(substr($key,0,strlen($key)/2), true) . sha1(substr($key,strlen($key)/2), true); $key = substr(md5($key), 0, mcrypt_enc_get_key_size($td)); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, $key, $iv); $decrypted_data = mdecrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); return unserialize(trim(chop($decrypted_data))); } }
简单实用: $key = "woadsfx234x4$"; $i = $this->mencrypt(array("b"=>2),$key); var_dump($this->mdecrypt($i,$key)) ; $cipher_list = mcrypt_list_algorithms();//mcrypt支持的加密算法列表 $mode_list = mcrypt_list_modes();//mcrypt支持的加密模式列表 echo json_encode([$cipher_list,$mode_list]);输出支持的算法和加密模式:[ [ "cast-128", "gost", "rijndael-128", "twofish", "cast-256", "loki97", "rijndael-192", "saferplus", "wake", "blowfish-compat", "des", "rijndael-256", "serpent", "xtea", "blowfish", "enigma", "rc2", "tripledes", "arcfour" ], [ "cbc", "cfb", "ctr", "ecb", "ncfb", "nofb", "ofb", "stream" ]]接口开发中,一般app会在正式接口调用之前,先从服务器上获取app_token之类的安全口令,然后通过这个口令加密数据,传输到服务器,然后由服务器解密数据,最后才是使用这个实际的数据,从服务器返回数据也是通过这个口令加密数据,由app端解密数据。
phpDES加解密
最新推荐文章于 2024-02-05 15:20:57 发布