之前和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; }
}
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25606.html
摘要:對稱加密算法概念加密密鑰和解密密鑰相同,大部分算法加密揭秘過程互逆。特點算法公開相比非對稱加密計算量小加密速度快效率高。 對稱加密算法概念 加密密鑰和解密密鑰相同,大部分算法加密揭秘過程互逆。 特點:算法公開、(相比非對稱加密)計算量小、加密速度快、效率高。 弱點:雙方都使用同樣的密鑰,安全性得不到保證。 常用對稱加密算法 DES(Data Encryption Standard...
摘要:最近公司有個業務,需要對接第三方接口,但是參數是需要加密的,對方也只提供了一個的,在網上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的工程師對接出來的,在這里記錄一下大致的流程。 最近公司有個業務,需要對接第三方接口,但是參數是需要加密的,對方也只提供了一個java的demo,在網上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的Android工程師對接出來的,在這里記錄一下...
摘要:最近公司有個業務,需要對接第三方接口,但是參數是需要加密的,對方也只提供了一個的,在網上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的工程師對接出來的,在這里記錄一下大致的流程。 最近公司有個業務,需要對接第三方接口,但是參數是需要加密的,對方也只提供了一個java的demo,在網上到處搜索,沒有找到直接就能用的方法,后來還是跟公司的Android工程師對接出來的,在這里記錄一下...
摘要:密鑰長度是位,超過位數密鑰被忽略。跨語言做加密解密經常會出現問題,往往是填充方式不對編碼不一致或者加密解密模式沒有對應上造成。是為了兼容用加密的結果。 最近在對接客戶的CRM系統,獲取令牌時,要用DES方式加密解密,由于之前沒有搞錯這種加密方式,經過請教了百度和谷歌兩個老師后,結合了多篇文檔內容后,終于實現了。 一、DES介紹 DES 是對稱性加密里面常見一種,全稱為 Data Enc...
摘要:系列密碼學二傳送門密碼學一基礎密碼學算法分類消息編碼消息摘要類,類,對稱密碼非對稱密碼數字簽名五元組明文原始信息。非對稱密碼包提供給,,等非對稱加密算法。對稱加密算法在分布式網絡系統上使用較為困難,主要是因為密鑰管理困難,使用成本較高。 前言 最近一場面試,面試官問了我 對稱加密與非對稱加密的問題,雖然曾經看過一些內容,但是沒有系統的整理,所以當被問的時候,腦子里一片空白,沒有回答上...
閱讀 947·2021-09-26 09:55
閱讀 3192·2021-09-22 15:36
閱讀 2982·2021-09-04 16:48
閱讀 3142·2021-09-01 11:41
閱讀 2591·2019-08-30 13:49
閱讀 1492·2019-08-29 18:46
閱讀 3546·2019-08-29 17:28
閱讀 3425·2019-08-29 14:11