之前和Java对接使用到了des加密,在网上找到一个php版本,经过测试没问题。
class des_class {
public $key; function des_class($key) { $this->key = $key; } function encrypt($input) { $size = mcrypt_get_block_size("des", "ecb"); $input = $this->pkcs5_pad($input, $size); $key = $this->key; $td = mcrypt_module_open("des", "", "ecb", ""); $iv = @mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND); @mcrypt_generic_init($td, $key, $iv); $data = mcrypt_generic($td, $input); mcrypt_generic_deinit($td); mcrypt_module_close($td); $data = $this->byteArr2HexStr($this->getBytes($data)); return $data; } function decrypt($encrypted) { $encrypted = $this->array2str($this->hexStr2ByteArr($encrypted)); $key =$this->key; $td = mcrypt_module_open("des","","ecb",""); //使用MCRYPT_DES算法,cbc模式 $iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); $ks = mcrypt_enc_get_key_size($td); @mcrypt_generic_init($td, $key, $iv); //初始处理 $decrypted = mdecrypt_generic($td, $encrypted); //解密 mcrypt_generic_deinit($td); //结束 mcrypt_module_close($td); $y=$this->pkcs5_unpad($decrypted); return $y; } function pkcs5_pad ($text, $blocksize) { $pad = $blocksize - (strlen($text) % $blocksize); return $text . str_repeat(chr($pad), $pad); } function pkcs5_unpad($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); } /** * 将字符串转换为ASCII码值数组,和array2str 互为可逆的转换过程 * * @param string需要转换的字符串 * @return 转换后的ASCII码值数组 */ function getBytes($string) { $bytes = array(); for($i = 0; $i < strlen($string); $i++){ $bytes[] = ord($string[$i]); } return $bytes; } /** * 将ASCII码值数组转换为字符串,和getBytes 互为可逆的转换过程 * * @param $array需要转换的ASCII码值数组 * @return 转换后的字符串 */ function array2str($array) { $string = ""; foreach ($array as $key => $value) { $string .= chr($value); } return $string; } /** * 将数组转换为表示16进制值的字符串,和hexStr2ByteArr(String strIn) 互为可逆的转换过程 * * * @param array需要转换的byte数组 * @return 转换后的字符串 */ public function byteArr2HexStr($array) { $iLen = count($array); $return_str = ""; for ($i = 0; $i < $iLen; $i++) { $intTmp = $array[$i]; // 把负数转换为正数 while ($intTmp < 0) { $intTmp = $intTmp + 256; } $intTmp = dechex($intTmp); // 小于0F的数需要在前面补0 if(hexdec($intTmp) < 16) { $intTmp = "0" . $intTmp; } $return_str = $return_str . $intTmp; } return $return_str; } /** * 将表示16进制值的字符串转换为数组, 和byteArr2HexStr互为可逆的转换过程 * * @param $string 需要转换的字符串 * @return 转换后的数组 */ public function hexStr2ByteArr($string) { $len = strlen($string); $return = array(); for($i=0;$i<$len;$i=$i+2) { $return[] = hexdec(substr($string,$i,2)); } return $return; }
}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25606.html
摘要:对称加密算法概念加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。特点算法公开相比非对称加密计算量小加密速度快效率高。 对称加密算法概念 加密密钥和解密密钥相同,大部分算法加密揭秘过程互逆。 特点:算法公开、(相比非对称加密)计算量小、加密速度快、效率高。 弱点:双方都使用同样的密钥,安全性得不到保证。 常用对称加密算法 DES(Data Encryption Standard...
摘要:最近公司有个业务,需要对接第三方接口,但是参数是需要加密的,对方也只提供了一个的,在网上到处搜索,没有找到直接就能用的方法,后来还是跟公司的工程师对接出来的,在这里记录一下大致的流程。 最近公司有个业务,需要对接第三方接口,但是参数是需要加密的,对方也只提供了一个java的demo,在网上到处搜索,没有找到直接就能用的方法,后来还是跟公司的Android工程师对接出来的,在这里记录一下...
摘要:最近公司有个业务,需要对接第三方接口,但是参数是需要加密的,对方也只提供了一个的,在网上到处搜索,没有找到直接就能用的方法,后来还是跟公司的工程师对接出来的,在这里记录一下大致的流程。 最近公司有个业务,需要对接第三方接口,但是参数是需要加密的,对方也只提供了一个java的demo,在网上到处搜索,没有找到直接就能用的方法,后来还是跟公司的Android工程师对接出来的,在这里记录一下...
摘要:密钥长度是位,超过位数密钥被忽略。跨语言做加密解密经常会出现问题,往往是填充方式不对编码不一致或者加密解密模式没有对应上造成。是为了兼容用加密的结果。 最近在对接客户的CRM系统,获取令牌时,要用DES方式加密解密,由于之前没有搞错这种加密方式,经过请教了百度和谷歌两个老师后,结合了多篇文档内容后,终于实现了。 一、DES介绍 DES 是对称性加密里面常见一种,全称为 Data Enc...
摘要:系列密码学二传送门密码学一基础密码学算法分类消息编码消息摘要类,类,对称密码非对称密码数字签名五元组明文原始信息。非对称密码包提供给,,等非对称加密算法。对称加密算法在分布式网络系统上使用较为困难,主要是因为密钥管理困难,使用成本较高。 前言 最近一场面试,面试官问了我 对称加密与非对称加密的问题,虽然曾经看过一些内容,但是没有系统的整理,所以当被问的时候,脑子里一片空白,没有回答上...
阅读 946·2021-09-26 09:55
阅读 3191·2021-09-22 15:36
阅读 2980·2021-09-04 16:48
阅读 3142·2021-09-01 11:41
阅读 2591·2019-08-30 13:49
阅读 1490·2019-08-29 18:46
阅读 3545·2019-08-29 17:28
阅读 3424·2019-08-29 14:11