① 怎么用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