之前和Java對(duì)接使用到了des加密,在網(wǎng)上找到一個(gè)php版本,經(jīng)過測(cè)試沒問題。
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); //結(jié)束 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); } /** * 將字符串轉(zhuǎn)換為ASCII碼值數(shù)組,和array2str 互為可逆的轉(zhuǎn)換過程 * * @param string需要轉(zhuǎn)換的字符串 * @return 轉(zhuǎn)換后的ASCII碼值數(shù)組 */ function getBytes($string) { $bytes = array(); for($i = 0; $i < strlen($string); $i++){ $bytes[] = ord($string[$i]); } return $bytes; } /** * 將ASCII碼值數(shù)組轉(zhuǎn)換為字符串,和getBytes 互為可逆的轉(zhuǎn)換過程 * * @param $array需要轉(zhuǎn)換的ASCII碼值數(shù)組 * @return 轉(zhuǎn)換后的字符串 */ function array2str($array) { $string = ""; foreach ($array as $key => $value) { $string .= chr($value); } return $string; } /** * 將數(shù)組轉(zhuǎn)換為表示16進(jìn)制值的字符串,和hexStr2ByteArr(String strIn) 互為可逆的轉(zhuǎn)換過程 * * * @param array需要轉(zhuǎn)換的byte數(shù)組 * @return 轉(zhuǎn)換后的字符串 */ public function byteArr2HexStr($array) { $iLen = count($array); $return_str = ""; for ($i = 0; $i < $iLen; $i++) { $intTmp = $array[$i]; // 把負(fù)數(shù)轉(zhuǎn)換為正數(shù) while ($intTmp < 0) { $intTmp = $intTmp + 256; } $intTmp = dechex($intTmp); // 小于0F的數(shù)需要在前面補(bǔ)0 if(hexdec($intTmp) < 16) { $intTmp = "0" . $intTmp; } $return_str = $return_str . $intTmp; } return $return_str; } /** * 將表示16進(jìn)制值的字符串轉(zhuǎn)換為數(shù)組, 和byteArr2HexStr互為可逆的轉(zhuǎn)換過程 * * @param $string 需要轉(zhuǎn)換的字符串 * @return 轉(zhuǎn)換后的數(shù)組 */ 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; }
}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/25606.html
摘要:對(duì)稱加密算法概念加密密鑰和解密密鑰相同,大部分算法加密揭秘過程互逆。特點(diǎn)算法公開相比非對(duì)稱加密計(jì)算量小加密速度快效率高。 對(duì)稱加密算法概念 加密密鑰和解密密鑰相同,大部分算法加密揭秘過程互逆。 特點(diǎn):算法公開、(相比非對(duì)稱加密)計(jì)算量小、加密速度快、效率高。 弱點(diǎn):雙方都使用同樣的密鑰,安全性得不到保證。 常用對(duì)稱加密算法 DES(Data Encryption Standard...
摘要:最近公司有個(gè)業(yè)務(wù),需要對(duì)接第三方接口,但是參數(shù)是需要加密的,對(duì)方也只提供了一個(gè)的,在網(wǎng)上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的工程師對(duì)接出來的,在這里記錄一下大致的流程。 最近公司有個(gè)業(yè)務(wù),需要對(duì)接第三方接口,但是參數(shù)是需要加密的,對(duì)方也只提供了一個(gè)java的demo,在網(wǎng)上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的Android工程師對(duì)接出來的,在這里記錄一下...
摘要:最近公司有個(gè)業(yè)務(wù),需要對(duì)接第三方接口,但是參數(shù)是需要加密的,對(duì)方也只提供了一個(gè)的,在網(wǎng)上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的工程師對(duì)接出來的,在這里記錄一下大致的流程。 最近公司有個(gè)業(yè)務(wù),需要對(duì)接第三方接口,但是參數(shù)是需要加密的,對(duì)方也只提供了一個(gè)java的demo,在網(wǎng)上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的Android工程師對(duì)接出來的,在這里記錄一下...
摘要:密鑰長(zhǎng)度是位,超過位數(shù)密鑰被忽略??缯Z(yǔ)言做加密解密經(jīng)常會(huì)出現(xiàn)問題,往往是填充方式不對(duì)編碼不一致或者加密解密模式?jīng)]有對(duì)應(yīng)上造成。是為了兼容用加密的結(jié)果。 最近在對(duì)接客戶的CRM系統(tǒng),獲取令牌時(shí),要用DES方式加密解密,由于之前沒有搞錯(cuò)這種加密方式,經(jīng)過請(qǐng)教了百度和谷歌兩個(gè)老師后,結(jié)合了多篇文檔內(nèi)容后,終于實(shí)現(xiàn)了。 一、DES介紹 DES 是對(duì)稱性加密里面常見一種,全稱為 Data Enc...
摘要:系列密碼學(xué)二傳送門密碼學(xué)一基礎(chǔ)密碼學(xué)算法分類消息編碼消息摘要類,類,對(duì)稱密碼非對(duì)稱密碼數(shù)字簽名五元組明文原始信息。非對(duì)稱密碼包提供給,,等非對(duì)稱加密算法。對(duì)稱加密算法在分布式網(wǎng)絡(luò)系統(tǒng)上使用較為困難,主要是因?yàn)槊荑€管理困難,使用成本較高。 前言 最近一場(chǎng)面試,面試官問了我 對(duì)稱加密與非對(duì)稱加密的問題,雖然曾經(jīng)看過一些內(nèi)容,但是沒有系統(tǒng)的整理,所以當(dāng)被問的時(shí)候,腦子里一片空白,沒有回答上...
閱讀 956·2021-09-26 09:55
閱讀 3216·2021-09-22 15:36
閱讀 2996·2021-09-04 16:48
閱讀 3152·2021-09-01 11:41
閱讀 2606·2019-08-30 13:49
閱讀 1502·2019-08-29 18:46
閱讀 3554·2019-08-29 17:28
閱讀 3440·2019-08-29 14:11