PHP進行3des加密

2021-09-25 23:42:11 字數 2766 閱讀 5183

封裝加密解密類

<?php

use think\controller;

header("content-type:text/html; charset=utf-8");

class encrypt extends controller

//檢查加密key,iv的長度是否符合演算法要求

$key = $this->fixlen($key, mcrypt_enc_get_key_size($td));

if ( empty($iv) )

else

$iv = $this->fixlen($iv_t, mcrypt_enc_get_iv_size($td));

//加密資料長度處理,長度必須是 n * 分組大小,否則需要後補資料,根據不同的補碼方式,來補不同的資料

$str = $this->addpkcs7padding($str, mcrypt_enc_get_block_size($td));

//初始化加密所需的緩衝區

if (mcrypt_generic_init($td, $key, $iv) !== 0)

$result = mcrypt_generic($td, $str);

/*** 對加密後的資料進行base64加密處理,在入庫時,varchar型別會自動移除字串末尾的「空格」。

* 由於加密後的資料可能是以空格(ascii 32)結尾, 這種特性會導致資料損壞。

* 官方建議請使用 tinyblob/tinytext(或 larger)欄位來儲存加密資料。

*/$result = base64_encode($result);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

return $result;

}/**

* 對加密的字串進行3des解密

* @param string 要解密的字串

* @return mixed 加密成功返回加密後的字串,否則返回false

*/public function decrypt3des($str)

//檢查加密key,iv的長度是否符合演算法要求

$key = $this->fixlen($key, mcrypt_enc_get_key_size($td));

if ( empty($iv) )

else

$iv = $this->fixlen($iv_t, mcrypt_enc_get_iv_size($td));

//初始化加密所需的緩衝區

if (mcrypt_generic_init($td, $key, $iv) !== 0)

$result = mdecrypt_generic($td, base64_decode($str));

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

/*** 通過 mdecrypt_generic() 函式解密之後的資料是加密之前對加密資料長度補"\0"的資料。

* 使用 rtrim($str, "\0") 移除字串末尾的 "\0" 。

*/return $this->strippksc7padding($this->strunpad($result));

}/**

* 返回適合演算法長度的key,iv字串,末尾使用0補齊

* @param string $str key或iv的值

* @param int $td_len 符合條件的key或iv長度

* @return string 返回處理後的key或iv值

*/private function fixlen($str, $td_len)

else if($str_len < $td_len)

return $str;

}/**

* 返回適合演算法的分組大小的字串長度,末尾使用\0補齊

* @param string $str 要加密的字串

* @param int $td_group_len 符合演算法的分組長度

* @return string 返回處理後字串

*/private function strpad($str, $td_group_len)

/*** 返回解密後移除字串末尾的 "\0"的資料

* @param string $str 解密後的字串

* @return string 返回處理後字串

*/private function strunpad($str)

/*** 為字串新增pkcs7 padding

* @param string $str 源字串

*/private function addpkcs7padding($str, $td_group_len)

return $str;

}/**

* 去除字串末尾的pkcs7 padding

* @param string $source 帶有padding字元的字串

*/private function strippksc7padding($str)

$len = strlen($str);

for($i = $len - 1; $i >= $len - $num; $i--)

}$source = substr($str, 0, -$num);

return $source;

}}

在其他控制器中呼叫加密方法,進行加密解密

3des演算法加密

實現的原理 public class encryption 執行3des加密 param secretkey 秘鑰 param datastring 明文 return base64編碼文字 public static string encryptdes string secretkey,strin...

Des與3Des加密解密

des和3des演算法 public class des b ret.tostring return ret.tostring 3des加密 金鑰不能每8位重複,例如 123456781234567812345678,如果這樣則演算法退化為des,c 會檢測,不能使用 明文 金鑰 public st...

php中3DES加密技術

因為工作中要用到加密,介面中要求也是用密文傳輸資料,用到3des加密,就研究了一下。在網上也找了好多,但是都不可以用,沒法正式執行,終於找到乙個可以執行的,自己又修改了一下,記錄下來,以後還可能會用到。下面安裝我要呼叫的介面文例項 介面要求 先用 3des對資料進行加密,在用 base64 進行加密...