① 怎麼用php進行3des解密
<?php
classCrypt3Des{
var$key;
functionCrypt3Des($key){
$this->key=$key;
}
functionencrypt($input){
$size=mcrypt_get_block_size(MCRYPT_3DES,'ecb');
$input=$this->pkcs5_pad($input,$size);
$key=str_pad($this->key,24,'0');
$td=mcrypt_mole_open(MCRYPT_3DES,'','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_mole_close($td);
//$data=base64_encode($this->PaddingPKCS7($data));
$data=base64_encode($data);
return$data;
}
functiondecrypt($encrypted){
$encrypted=base64_decode($encrypted);
$key=str_pad($this->key,24,'0');
$td=mcrypt_mole_open(MCRYPT_3DES,'','ecb','');
$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_mole_close($td);
$y=$this->pkcs5_unpad($decrypted);
return$y;
}
functionpkcs5_pad($text,$blocksize){
$pad=$blocksize-(strlen($text)%$blocksize);
return$text.str_repeat(chr($pad),$pad);
}
functionpkcs5_unpad($text){
$pad=ord($text{strlen($text)-1});
if($pad>strlen($text)){
returnfalse;
}
if(strspn($text,chr($pad),strlen($text)-$pad)!=$pad){
returnfalse;
}
returnsubstr($text,0,-1*$pad);
}
functionPaddingPKCS7($data){
$block_size=mcrypt_get_block_size(MCRYPT_3DES,MCRYPT_MODE_CBC);
$padding_char=$block_size-(strlen($data)%$block_size);
$data.=str_repeat(chr($padding_char),$padding_char);
return$data;
}
}
用法:
$crypt=newCrypt3Des('密鑰');
$code="加密後的字元串";
echo$crypt->decrypt($code);
echo出來的就是結果
② 如何用php做AES加密解密,編碼是UTF-8,跪謝求代碼
class CryptAES
{
protected $cipher = MCRYPT_RIJNDAEL_128;
protected $mode = MCRYPT_MODE_ECB;
protected $pad_method = NULL;
protected $secret_key = '';
protected $iv = '';
public function set_cipher($cipher)
{
$this->cipher = $cipher;
}
public function set_mode($mode)
{
$this->mode = $mode;
}
public function set_iv($iv)
{
$this->iv = $iv;
}
public function set_key($key)
{
$this->secret_key = $key;
}
public function require_pkcs5()
{
$this->pad_method = 'pkcs5';
}
protected function pad_or_unpad($str, $ext)
{
if ( is_null($this->pad_method) )
{
return $str;
}
else
{
$func_name = __CLASS__ . '::' . $this->pad_method . '_' . $ext . 'pad';
if ( is_callable($func_name) )
{
$size = mcrypt_get_block_size($this->cipher, $this->mode);
return call_user_func($func_name, $str, $size);
}
}
return $str;
}
protected function pad($str)
{
return $this->pad_or_unpad($str, '');
}
protected function unpad($str)
{
return $this->pad_or_unpad($str, 'un');
}
public function encrypt($str)
{
$str = $this->pad($str);
$td = mcrypt_mole_open($this->cipher, '', $this->mode, '');
if ( empty($this->iv) )
{
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
}
else
{
$iv = $this->iv;
}
mcrypt_generic_init($td, $this->secret_key, $iv);
$cyper_text = mcrypt_generic($td, $str);
$rt=base64_encode($cyper_text);
//$rt = bin2hex($cyper_text);
mcrypt_generic_deinit($td);
mcrypt_mole_close($td);
return $rt;
}
public function decrypt($str){
$td = mcrypt_mole_open($this->cipher, '', $this->mode, '');
if ( empty($this->iv) )
{
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
}
else
{
$iv = $this->iv;
}
mcrypt_generic_init($td, $this->secret_key, $iv);
//$decrypted_text = mdecrypt_generic($td, self::hex2bin($str));
$decrypted_text = mdecrypt_generic($td, base64_decode($str));
$rt = $decrypted_text;
mcrypt_generic_deinit($td);
mcrypt_mole_close($td);
return $this->unpad($rt);
}
public static function hex2bin($hexdata) {
$bindata = '';
$length = strlen($hexdata);
for ($i=0; $i< $length; $i += 2)
{
$bindata .= chr(hexdec(substr($hexdata, $i, 2)));
}
return $bindata;
}
public static function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (@strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
public static 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);
}
}
/*$keyStr = 'UITN25LMUQC436IM';
$plainText = 'this is a string will be AES_Encrypt';
$aes = new CryptAES();
$aes->set_key($keyStr);
$aes->require_pkcs5();
$encText = $aes->encrypt($plainText);
$decString = $aes->decrypt($encText);
echo $encText,"n",$decString;*/
③ PHP的Mcrypt加密擴展知識了解
學習 PHP 的過時加密擴展 Mcrypt,需注意其已被 PHP7 之後版本淘汰,需單獨安裝並處理過時警告。使用 @ 抑制錯誤信息。PHP 推薦使用 OpenSSL 處理加密。
Mcrypt 擴展使用 Mcrypt 工具加密,需安裝 libmcrypt-devel 在 CentOS 或其他操作系統中。檢查支持的模塊和演算法使用 mcrypt_list_algorithms() 和 mcrypt_list_modes() 函數。
Mcrypt 包含多種模塊和演算法,如 CBC、OFB、CFB 和 ECB。選擇合適的模塊和演算法是加密過程的關鍵。確定加密 key 和 input 後,使用 mcrypt_mole_open() 打開加密模塊句柄,mcrypt_create_iv() 創建 iv,使用 mcrypt_generic() 進行加密,mcrypt_generic_deinit() 結束加密,最後使用 mcrypt_mole_close() 關閉句柄。
Mcrypt 加密流程復雜,存在更簡便的加密方式:使用 mcrypt_encrypt() 和 mcrypt_decrypt() 函數進行加密和解密。相對於 Mcrypt,Hash 加密是單向加密,無法反向計算原始數據,適用於不同的應用場景。
總結,盡管 Mcrypt 已不再推薦使用,但進行加/解密測試仍然可行。學習 OpenSSL 擴展時,將詳細解釋對稱和非對稱加密的區別。如有實際需求,參考手冊進行深入學習。
④ 缺少 mcrypt 擴展。請檢查 PHP 配置。
phpinfo()看看是否有mcrypt,應該是沒有的,你用的應該是ubuntu吧,在php源碼的ext文件夾里有mcrypt擴展,這個需要編譯,擴展編譯好後有個mcrypt.so的文件,到php擴展目標,修改php.ini文件,然後重新啟動php