葡京网投哪个正规 > 新葡亰-编程 > PHP中使用AES加密算法加密数据的例子,php中AES加密解密的例子小结_php实例_脚本之家葡京网投哪个正规:

原标题:PHP中使用AES加密算法加密数据的例子,php中AES加密解密的例子小结_php实例_脚本之家葡京网投哪个正规:

浏览次数:79 时间:2019-11-24

超多时候我们供给对数据举行加密解密,例如有些数据供给保留到cookie中,但又无法被客户专擅获取那些数量,这个时候大家就供给加密那个多丞相存到cookie中,等大家须要运用它们的时候再解密。

本篇随笔是对三个简单的PHP可逆加密函数举行了详细的解析介绍,须要的爱人参考下

 

成千上万时候我们必要对数码进行加密解密,比如有个别数据需求保留到cookie中,但又不能够被顾客自由获取那么些数据,这时候大家就须要加密这几个多里胥存到cookie中,等大家需求使用它们的时候再解密。

加密的历程如下:

复制代码代码如下:

// 加密数据并写到cookie里 $cookie_data = $this -> encrypt("nowamagic", $data);

$cookie = array(
    'name'   => '$data',
    'value'  => $cookie_data,
    'expire' => $user_expire,
    'domain' => '',
    'path'   => '/',
    'prefix' => ''
);
$this->input->set_cookie($cookie);

// 加密 public function encrypt($key, $plain_text) {  
    $plain_text = trim($plain_text);  
    $iv = substr(md5($key), 0,mcrypt_get_iv_size (MCRYPT_CAST_256,MCRYPT_MODE_CFB));  
    $c_t = mcrypt_cfb (MCRYPT_CAST_256, $key, $plain_text, MCRYPT_ENCRYPT, $iv);  
    return trim(chop(base64_encode($c_t)));  

 

接受的时候再解密: if( isset($_COOKIE['data']) )
{
    //用cookie给session赋值     $_SESSION['data'] = decrypt("nowamagic", $_COOKIE['data']);
}

function decrypt($key, $c_t) {  
    $c_t = trim(chop(base64_decode($c_t)));  
    $iv = substr(md5($key), 0,mcrypt_get_iv_size (MCRYPT_CAST_256,MCRYPT_MODE_CFB));  
    $p_t = mcrypt_cfb (MCRYPT_CAST_256, $key, $c_t, MCRYPT_DECRYPT, $iv);  
    return trim(chop($p_t));  
}  

此间记录下这一个可逆的加密函数的运用。

在商量Discuz 的时候,发现Discuz有豆蔻梢头套相当周到的加密算法(相对来说)。这一个算法能够将数据加密后,积攒起来,到须要用的时候,用事先加密的秘钥将之还原。

aesDemo.php:

加密的历程如下:复制代码 代码如下:// 加密数据并写到cookie里$cookie_data = $this -> encrypt;$cookie = array( 'name' => '$data', 'value' => $cookie_data, 'expire' => $user_expire, 'domain' => '', 'path' => '/', 'prefix' => '');$this->input->set_cookie;// 加密public function encrypt { $plain_text = trim; $iv = substr, 0,mcrypt_get_iv_size (MCRYPT_CAST_256,MCRYPT_MODE_CFB)); $c_t = mcrypt_cfb (MCRYPT_CAST_256, $key, $plain_text, MCRYPT_ENCRYPT, $iv); return trim(chop; }

除此而外,还会有AES那几个算法能够将数据很好的加密起来,在传输进度中不轻松被破解。

例子,

运用的时候再解密:if( isset{ //用cookie给session赋值 $_SESSION['data'] = decrypt("nowamagic", $_COOKIE['data']);}function decrypt { $c_t = trim(chop; $iv = substr, 0,mcrypt_get_iv_size (MCRYPT_CAST_256,MCRYPT_MODE_CFB)); $p_t = mcrypt_cfb (MCRYPT_CAST_256, $key, $c_t, MCRYPT_DEC中华VYPT, $iv); return trim; } 这里记录下这一个可逆的加密函数的施用。

在PHP中,大家必须要先安装好mcrypt那一个模块,况兼增进相应版本的增至php中,详细情况能够看 不重复编写翻译PHP安装Mcrypt增加

复制代码 代码如下:makeKey;$encode = "123456";// 被加密的字符串$ct = $aes->encryptString;echo "encode = ".$ct."
";$cpt = $aes->decryptString;echo "decode = ".$cpt;?>

AES加密方式和填充方式有以下之中,但不是全部

例子、AES加密类

算法/方式/填充                16字节加密后数据长度        不满16字节加密后长度
AES/CBC/NoPadding             16                          不支持
AES/CBC/PKCS5Padding          32                          16
AES/CBC/ISO10126Padding       32                          16
AES/CFB/NoPadding             16                          原始数据长度
AES/CFB/PKCS5Padding          32                          16
AES/CFB/ISO10126Padding       32                          16
AES/ECB/NoPadding             16                          不支持
AES/ECB/PKCS5Padding          32                          16
AES/ECB/ISO10126Padding       32                          16
AES/OFB/NoPadding             16                          原始数据长度
AES/OFB/PKCS5Padding          32                          16
AES/OFB/ISO10126Padding       32                          16
AES/PCBC/NoPadding            16                          不支持
AES/PCBC/PKCS5Padding         32                          16
AES/PCBC/ISO10126Padding      32                          16

复制代码 代码如下:

上面正是在PHP中央银行使AES对数码加密

public $iv = null;public $key = null;public $bit = 128;private $cipher;

AES-CBC 加密方案

public function __construct($bit, $key, $iv, $mode) {if || empty || emptyreturn NULL;

 代码如下

$this->bit = $bit;$this->key = $key;$this->iv = $iv;$this->mode = $mode;

<?php
$privateKey = "1234567812345678";
$iv = "1234567812345678";
$data = "Test String";

switch {case 192:$this->cipher = MCRYPT_RIJNDAEL_192; break;case 256:$this->cipher = MCRYPT_RIJNDAEL_256; break;default: $this->cipher = MCRYPT_RIJNDAEL_128;}

//加密
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $privateKey, $data, MCRYPT_MODE_CBC, $iv);
echo(base64_encode($encrypted));
echo '<br/>';

switch {case 'ecb':$this->mode = MCRYPT_MODE_ECB; break;case 'cfb':$this->mode = MCRYPT_MODE_CFB; break;case 'ofb':$this->mode = MCRYPT_MODE_OFB; break;case 'nofb':$this->mode = MCRYPT_MODE_NOFB; break;default: $this->mode = MCRYPT_MODE_CBC;}}

//解密
$encryptedData = base64_decode("2fbwW9+8vPId2/foafZq6Q==");
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $privateKey, $encryptedData, MCRYPT_MODE_CBC, $iv);
echo($decrypted);
?>

public function encrypt {$data = base64_encode(mcrypt_encrypt( $this->cipher, $this->key, $data, $this->mode, $this->iv));return $data;}

AES-ECB加密方案

public function decrypt {$data = mcrypt_decrypt( $this->cipher, $this->key, base64_decode, $this->mode, $this->iv);$data = rtrim;return $data;}

 代码如下

}//使用办法$aes = new AESMcrypt($bit = 128, $key = 'abcdef1234567890', $iv = '0987654321fedcba', $mode = 'cbc');$c = $aes->encrypt;var_dump;

<?php 
//加密   
$key = '1234567890123456';   
$content = 'hello';   
$padkey = pad2Length($key,16);   
$cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');   
$iv_size = mcrypt_enc_get_iv_size($cipher);   
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); #IV自动生成?   
echo '自动生成iv的长短:'.strlen($iv).'位:'.bin2hex($iv).'<br>';   
if (mcrypt_generic_init($cipher, pad2Length($key,16), $iv) != -1)   
{   
   // PHP pads with NULL bytes if $content is not a multiple of the block size..   
   $cipherText = mcrypt_generic($cipher,pad2Length($content,16) );   
   mcrypt_generic_deinit($cipher);   
   mcrypt_module_close($cipher);   
    
   // Display the result in hex.   
   printf("128-bit encrypted result:n%snn",bin2hex($cipherText));   
   print("<br />");   
    
}   
//解密   
$mw = bin2hex($cipherText);   
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');   
if (mcrypt_generic_init($td, $padkey, $iv) != -1)   
{   
   $p_t = mdecrypt_generic($td, hexToStr($mw));   
   mcrypt_generic_deinit($td);   
   mcrypt_module_close($td);   
    
   $p_t = trimEnd($p_t);   
   echo '解密:';   
   print($p_t);   
   print("<br />");   
   print(bin2hex($p_t));   
   echo '<br><br>';   
}   
//将$text补足$padlen倍数的长度   
function pad2Length($text, $padlen){   
   $len = strlen($text)%$padlen;   
   $res = $text;   
   $span = $padlen-$len;   
   for($i=0; $i<$span; $i++){   
       $res .= chr($span);   
   }   
   return $res;   
}   
//将解密后剩余的长短去掉(因为在加密的时候 补充长度满意block_size的长度)   
function trimEnd($text){   
   $len = strlen($text);   
   $c = $text[$len-1];   
   if(ord($c) <$len){   
       for($i=$len-ord($c); $i<$len; $i++){   
           if($text[$i] != $c){   
               return $text;   
           }   
       }   
       return substr($text, 0, $len-ord($c));   
   }   
   return $text;   
}   
//16进制的转为2进制字符串   
function hexToStr($hex)   
{   
   $bin="";   
   for($i=0; $i<strlen($hex)-1; $i+=2)   
   {   
       $bin.=chr(hexdec($hex[$i].$hex[$i+1]));   
   }   
   return $bin;   
}   

事例、附四个可加密可解密类

AES-ECB加密方案

复制代码 代码如下:* // 实例化类* // 参数$_bit:格式,支持256、192、128,默认为128字节的* // 参数$_type:加密/解密情势,支持cfb、cbc、nofb、ofb、stream、ecb,默感觉ecb* // 参数$_key:密钥,默认为abcdefghijuklmno* $tcaes = new TCAES(); * $string = 'laohu';* // 加密* $encodeString = $tcaes->encode;* // 解密* $decodeString = $tcaes->decode;* */class TCAES{private $_bit = MCRYPT_RIJNDAEL_256;private $_type = MCRYPT_MODE_CBC;//private $_key = 'abcdefghijuklmno0123456789012345';private $_key = 'abcdefghijuklmno'; // 密钥private $_use_base64 = true;private $_iv_size = null;private $_iv = null;/** * @param string $_key 密钥 * @param int $_bit 暗中认可使用128字节 * @param string $_type 加密解密方式 * @param boolean $_use_base64 私下认可使用base64三次加密 */public function __construct($_key = '', $_bit = 128, $_type = 'ecb', $_use_base64 = true){ // 加密字节 if{ $this->_bit = MCRYPT_RIJNDAEL_192; }elseif{ $this->_bit = MCRYPT_RIJNDAEL_128; }else{ $this->_bit = MCRYPT_RIJNDAEL_256; } // 加密方法 if{ $this->_type = MCRYPT_MODE_CFB; }elseif{ $this->_type = MCRYPT_MODE_CBC; }elseif{ $this->_type = MCRYPT_MODE_NOFB; }elseif{ $this->_type = MCRYPT_MODE_OFB; }elseif{ $this->_type = MCRYPT_MODE_STREAM; }else{ $this->_type = MCRYPT_MODE_ECB; } // 密钥 if{ $this->_key = $_key; } // 是不是使用base64 $this->_use_base64 = $_use_base64; $this->_iv_size = mcrypt_get_iv_size($this->_bit, $this->_type); $this->_iv = mcrypt_create_iv($this->_iv_size, MCRYPT_RAND);}/** * 加密 * @param string $string 待加密字符串 * @return string */public function encode{ if(MCRYPT_MODE_ECB === $this->_type){ $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type); }else{ $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv); } if $encodeString = base64_encode; return $encodeString;}/** * 解密 * @param string $string 待解密字符串 * @return string */public function decode{ if $string = base64_decode; $string = $this->toHexString; if(MCRYPT_MODE_ECB === $this->_type){ $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type); }else{ $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv); } return $decodeString;}/** * 将$string调换到十三进制 * @param string $string * @return stream */private function toHexString { $buf = ""; for ($i = 0; $i < strlen{ $val = dechex; if $val = "0".$val; $buf .= $val; } return $buf;}/** * 将十八进制流$string转变到字符串 * @param stream $string * @return string */private function fromHexString{ $buf = ""; for($i = 0; $i < strlen{ $val = chr(hexdec(substr; $buf .= $val; } return $buf;}}

 代码如下

<?php       
$key = '1234567890123456';   
$key = pad2Length($key,16);   
$iv = 'asdff';   
$content = 'hello';   
$content = pad2Length($content,16);   
$AESed =  bin2hex( mcrypt_encrypt(MCRYPT_RIJNDAEL_128,$key,$content,MCRYPT_MODE_ECB,$iv) ); #加密   
echo "128-bit encrypted result:".$AESed.'<br>';   
$jiemi = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,$key,hexToStr($AESed),MCRYPT_MODE_ECB,$iv); #解密   
echo '解密:';   
echo trimEnd($jiemi);     
?> 

以上只是自个儿列出的简约的3种加密方法,事实上还会有众多中方法,供给大家不断的就学。密码学的道路还要害

本文由葡京网投哪个正规发布于新葡亰-编程,转载请注明出处:PHP中使用AES加密算法加密数据的例子,php中AES加密解密的例子小结_php实例_脚本之家葡京网投哪个正规:

关键词:

上一篇:异步执行方法,PHP中实现异步调用多线程程序代码

下一篇:没有了