php 3des pkcs7加密_PHP7.2接口加解密(3DES)openssl方式 兼容旧版mcrypt

/*

*2021-3-2

*使用3DES加密

*必须开启openssl扩展

*算法公开,请对key严格保密

/

error_reporting(0);

header("Content-Type:text/html;charset=utf-8");

class DES3

{

var

math?formula=key%20%3D%20%22jt4j41n5fdefgssdfxkuxhak%22%3B%20variv = "xfdeqghd";

/*

* @title 加密

* @param string

math?formula=value%20%E8%A6%81%E4%BC%A0%E7%9A%84%E5%8F%82%E6%95%B0%20*%20%40%20%2F%2FOPENSSL_RAW_DATA%7COPENSSL_ZERO_PADDING%20%2F%2FAES-128-ECB%7CAES-256-CBC%7CBF-CBC%20*%20%40return%20json%20*%20*%2F%20public%20function%20encrypt(value)

{

//参考地址:https://stackoverflow.com/questions/41181905/php-mcrypt-encrypt-to-openssl-encrypt-and-openssl-zero-padding-problems#

$value = $this->PaddingPKCS7($value);

$key = $this->key;

$iv = $this->iv;

$cipher = "DES-EDE3-CBC";

if (in_array($cipher, openssl_get_cipher_methods())) {

$result = openssl_encrypt($value, $cipher, $key, OPENSSL_SSLV23_PADDING, $iv);

}

return $result;

}

/**

* @title 解密

* @param string $value 要传的参数

* @return json

* */

public function decrypt($value)

{

$key = $this->key;

$iv = $this->iv;

$decrypted = openssl_decrypt($value, 'DES-EDE3-CBC', $key, OPENSSL_SSLV23_PADDING, $iv);

$ret = $this->UnPaddingPKCS7($decrypted);

return $ret;

}

private function PaddingPKCS7($data)

{

$block_size = 8;

$padding_char = $block_size - (strlen($data) % $block_size);

$data .= str_repeat(chr($padding_char), $padding_char);

return $data;

}

private function UnPaddingPKCS7($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);

}

function from_json($s){

$yz=preg_match('/[^,:{}\\[\\]0-9.\-+Eaeflnr-u \n\r\t]/',$s) ? '1' : '0';

if($yz==1){

$arr=json_decode($s,ture);

return $arr;

}

}

}

//

math?formula=des%20%3D%20new%20DES3()%3B%20%2F%2F%20echoret =

math?formula=des-%3Eencrypt(%22a%3D1%26b%3D2%22)%20.%20%22%5Cn%22%3B%20%2F%2F%20echodess->from_json(

math?formula=dess-%3Edecrypt(jsonpost));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP中的3DES加密解密可以使用mcrypt扩展库实现。下面是一个使用3DES ECB模式进行加密解密的示例代码: ```php // 加密函数 function encrypt($data, $key) { $key = substr($key, 0, 24); $data = pkcs5_pad($data, 8); $mcrypt = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($mcrypt), MCRYPT_RAND); mcrypt_generic_init($mcrypt, $key, $iv); $encrypted = mcrypt_generic($mcrypt, $data); mcrypt_generic_deinit($mcrypt); mcrypt_module_close($mcrypt); return base64_encode($encrypted); } // 解密函数 function decrypt($data, $key) { $key = substr($key, 0, 24); $data = base64_decode($data); $mcrypt = mcrypt_module_open('tripledes', '', 'ecb', ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($mcrypt), MCRYPT_RAND); mcrypt_generic_init($mcrypt, $key, $iv); $decrypted = mdecrypt_generic($mcrypt, $data); mcrypt_generic_deinit($mcrypt); mcrypt_module_close($mcrypt); return pkcs5_unpad($decrypted); } // PKCS5填充函数 function pkcs5_pad($data, $blocksize) { $pad = $blocksize - (strlen($data) % $blocksize); return $data . str_repeat(chr($pad), $pad); } // PKCS5去填充函数 function pkcs5_unpad($data) { $pad = ord($data[strlen($data) - 1]); if ($pad > strlen($data)) { return false; } if (strspn($data, chr($pad), strlen($data) - $pad) != $pad) { return false; } return substr($data, 0, -1 * $pad); } // 使用示例 $key = '123456789012345678901234'; $data = 'Hello World!'; $encrypted = encrypt($data, $key); echo '加密后的数据:' . $encrypted . "\n"; $decrypted = decrypt($encrypted, $key); echo '解密后的数据:' . $decrypted . "\n"; ``` 在上述代码中,encrypt()函数用于加密数据,decrypt()函数用于解密数据。其中,$data表示待加密的数据,$key表示加密密钥。在加密过程中,需要先对数据进行PKCS5填充。解密时,需要先将密文进行base64解码,然后再进行解密操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值