封裝加密解密類
<?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 進行加密...