php对称加密算法的例子_PHP教程

WBOY
Freigeben: 2016-07-13 10:30:08
Original
843 Leute haben es durchsucht

分享下php对称加密算法的实现代码。

KEY 是之前定义的常量

Mcrypt::<span encrypt();
Mcrypt</span>::<span decrypt();

</span><span defined</span>('ROOT') or <span exit</span>('Access Denied'<span );
</span><span class</span><span  Mcrypt{

</span><span public</span> <span static</span> <span function</span> encrypt(<span $code</span><span ){
</span><span return</span> <span base64_encode</span>(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, <span md5</span>(<span KEY</span>), <span $code</span>, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),<span  MCRYPT_RAND)));
}

</span><span public</span> <span static</span> <span function</span> decrypt(<span $code</span><span ){
</span><span return</span> mcrypt_decrypt(MCRYPT_RIJNDAEL_256, <span md5</span>(<span KEY</span>), <span base64_decode</span>(<span $code</span>), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),<span  MCRYPT_RAND));
}
}</span>
Nach dem Login kopieren

xcrypt.php

<span /*</span><span * 
* 常用对称加密算法类 
* 支持密钥:64/128/256 bit(字节长度8/16/32) 
* 支持算法:DES/AES(根据密钥长度自动匹配使用:DES:64bit AES:128/256bit) 
* 支持模式:CBC/ECB/OFB/CFB 
* 密文编码:base64字符串/十六进制字符串/二进制字符串流 
* 填充方式: PKCS5Padding(DES) 
* 
* @author: linvo 
* @version: 1.0.0 
* @date: 2013/1/10 
</span><span */</span> 
<span class</span><span  Xcrypt{

</span><span private</span> <span $mcrypt</span><span ; 
</span><span private</span> <span $key</span><span ; 
</span><span private</span> <span $mode</span><span ; 
</span><span private</span> <span $iv</span><span ; 
</span><span private</span> <span $blocksize</span><span ;

</span><span /*</span><span * 
* 构造函数 
* 
* @param string 密钥 
* @param string 模式 
* @param string 向量("off":不使用 / "auto":自动 / 其他:指定值,长度同密钥) 
</span><span */</span> 
<span public</span> <span function</span> __construct(<span $key</span>, <span $mode</span> = 'cbc', <span $iv</span> = "off"<span ){ 
</span><span switch</span> (<span strlen</span>(<span $key</span><span )){ 
</span><span case</span> 8: 
<span $this</span>->mcrypt =<span  MCRYPT_DES; 
</span><span break</span><span ; 
</span><span case</span> 16: 
<span $this</span>->mcrypt =<span  MCRYPT_RIJNDAEL_128; 
</span><span break</span><span ; 
</span><span case</span> 32: 
<span $this</span>->mcrypt =<span  MCRYPT_RIJNDAEL_256; 
</span><span break</span><span ; 
</span><span default</span>: 
<span die</span>("Key size must be 8/16/32"<span ); 
} www</span>.jbxue.<span com

</span><span $this</span>-><span key</span> = <span $key</span><span ;

</span><span switch</span> (<span strtolower</span>(<span $mode</span><span )){ 
</span><span case</span> 'ofb': 
<span $this</span>->mode =<span  MCRYPT_MODE_OFB; 
</span><span if</span> (<span $iv</span> == 'off') <span die</span>('OFB must give a IV'); <span //</span><span OFB必须有向量 </span>
<span break</span><span ; 
</span><span case</span> 'cfb': 
<span $this</span>->mode =<span  MCRYPT_MODE_CFB; 
</span><span if</span> (<span $iv</span> == 'off') <span die</span>('CFB must give a IV'); <span //</span><span CFB必须有向量 </span>
<span break</span><span ; 
</span><span case</span> 'ecb': 
<span $this</span>->mode =<span  MCRYPT_MODE_ECB; 
</span><span $iv</span> = 'off'; <span //</span><span ECB不需要向量 </span>
<span break</span><span ; 
</span><span case</span> 'cbc': 
<span default</span>: 
<span $this</span>->mode =<span  MCRYPT_MODE_CBC; 
}

</span><span switch</span> (<span strtolower</span>(<span $iv</span><span )){ 
</span><span case</span> "off": 
<span $this</span>->iv = <span null</span><span ; 
</span><span break</span><span ; 
</span><span case</span> "auto": 
<span $source</span> = <span PHP_OS</span>=='WINNT' ? MCRYPT_RAND :<span  MCRYPT_DEV_RANDOM; 
</span><span $this</span>->iv = mcrypt_create_iv(mcrypt_get_block_size(<span $this</span>->mcrypt, <span $this</span>->mode), <span $source</span><span ); 
</span><span break</span><span ; 
</span><span default</span>: 
<span $this</span>->iv = <span $iv</span><span ; 
} 
}

</span><span /*</span><span * 
* 获取向量值 
* @param string 向量值编码(base64/hex/bin) 
* @return string 向量值 
</span><span */</span>  www.jbxue.<span com
</span><span public</span> <span function</span> getIV(<span $code</span> = 'base64'<span ){ 
</span><span switch</span> (<span $code</span><span ){ 
</span><span case</span> 'base64': 
<span $ret</span> = <span base64_encode</span>(<span $this</span>-><span iv); 
</span><span break</span><span ; 
</span><span case</span> 'hex': 
<span $ret</span> = <span bin2hex</span>(<span $this</span>-><span iv); 
</span><span break</span><span ; 
</span><span case</span> 'bin': 
<span default</span>: 
<span $ret</span> = <span $this</span>-><span iv; 
} 
</span><span return</span> <span $ret</span><span ; 
} 

</span><span /*</span><span * 
* 加密 
* @param string 明文 
* @param string 密文编码(base64/hex/bin) 
* @return string 密文 
</span><span */</span> 
<span public</span> <span function</span> encrypt(<span $str</span>, <span $code</span> = 'base64'<span ){ 
</span><span if</span> (<span $this</span>->mcrypt == MCRYPT_DES) <span $str</span> = <span $this</span>->_pkcs5Pad(<span $str</span><span );

</span><span if</span> (<span isset</span>(<span $this</span>-><span iv)) { 
</span><span $result</span> = mcrypt_encrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>->mode, <span $this</span>-><span iv); 
} </span><span else</span><span  { 
@</span><span $result</span> = mcrypt_encrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>-><span mode); 
}

</span><span switch</span> (<span $code</span><span ){ 
</span><span case</span> 'base64': 
<span $ret</span> = <span base64_encode</span>(<span $result</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'hex': 
<span $ret</span> = <span bin2hex</span>(<span $result</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'bin': 
<span default</span>: 
<span $ret</span> = <span $result</span><span ; 
}

</span><span return</span> <span $ret</span><span ;

}

</span><span /*</span><span * 
* 解密 
* @param string 密文 
* @param string 密文编码(base64/hex/bin) 
* @return string 明文 
</span><span */</span> 
<span public</span> <span function</span> decrypt(<span $str</span>, <span $code</span> = "base64"<span ){ 
</span><span $ret</span> = <span false</span><span ;

</span><span switch</span> (<span $code</span><span ){ 
</span><span case</span> 'base64': 
<span $str</span> = <span base64_decode</span>(<span $str</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'hex': 
<span $str</span> = <span $this</span>->_hex2bin(<span $str</span><span ); 
</span><span break</span><span ; 
</span><span case</span> 'bin': 
<span default</span>:<span  
}

</span><span if</span> (<span $str</span> !== <span false</span><span ){ 
</span><span if</span> (<span isset</span>(<span $this</span>-><span iv)) { 
</span><span $ret</span> = mcrypt_decrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>->mode, <span $this</span>-><span iv); 
} </span><span else</span><span  { 
@</span><span $ret</span> = mcrypt_decrypt(<span $this</span>->mcrypt, <span $this</span>-><span key</span>, <span $str</span>, <span $this</span>-><span mode); 
} 
</span><span if</span> (<span $this</span>->mcrypt == MCRYPT_DES) <span $ret</span> = <span $this</span>->_pkcs5Unpad(<span $ret</span><span ); 
</span><span $ret</span> = <span trim</span>(<span $ret</span><span ); 
}

</span><span return</span> <span $ret</span><span ; 
}

</span><span private</span> <span function</span> _pkcs5Pad(<span $text</span><span ){ 
</span><span $this</span>->blocksize = mcrypt_get_block_size(<span $this</span>->mcrypt, <span $this</span>-><span mode); 
</span><span $pad</span> = <span $this</span>->blocksize - (<span strlen</span>(<span $text</span>) % <span $this</span>-><span blocksize); 
</span><span return</span> <span $text</span> . <span str_repeat</span>(<span chr</span>(<span $pad</span>), <span $pad</span><span ); 
}

</span><span private</span> <span function</span> _pkcs5Unpad(<span $text</span><span ){ 
</span><span $pad</span> = <span ord</span>(<span $text</span>{<span strlen</span>(<span $text</span>) - 1<span }); 
</span><span if</span> (<span $pad</span> > <span strlen</span>(<span $text</span>)) <span return</span> <span false</span><span ; 
</span><span if</span> (<span strspn</span>(<span $text</span>, <span chr</span>(<span $pad</span>), <span strlen</span>(<span $text</span>) - <span $pad</span>) != <span $pad</span>) <span return</span> <span false</span><span ; 
</span><span $ret</span> = <span substr</span>(<span $text</span>, 0, -1 * <span $pad</span><span ); 
</span><span return</span> <span $ret</span><span ; 
}

</span><span private</span> <span function</span> _hex2bin(<span $hex</span> = <span false</span><span ){ 
</span><span $ret</span> = <span $hex</span> !== <span false</span> && <span preg_match</span>('/^[0-9a-fA-F]+$/i', <span $hex</span>) ? <span pack</span>("H*", <span $hex</span>) : <span false</span><span ; 
</span><span return</span> <span $ret</span><span ; 
} 
} </span>
Nach dem Login kopieren

<?<span php 
</span><span header</span>('Content-Type:text/html;Charset=utf-8;'<span );

</span><span include</span> "xcrypt.php"<span ;

</span><span echo</span> '<pre class="brush:php;toolbar:false">'<span ; 
</span><span $a</span> = <span isset</span>(<span $_GET</span>['a']) ? <span $_GET</span>['a'] : '测试123'<span ;

</span><span //</span><span 密钥 </span>
<span $key</span> = '12345678123456781234567812345678'; <span //</span><span 256 bit </span>
<span $key</span> = '1234567812345678'; <span //</span><span 128 bit </span>
<span $key</span> = '12345678'; <span //</span><span 64 bit

//设置模式和IV </span>
<span $m</span> = <span new</span> Xcrypt(<span $key</span>, 'cbc', 'auto'<span );

</span><span //</span><span 获取向量值 </span>
<span echo</span> '向量:'<span ; 
</span><span var_dump</span>(<span $m</span>-><span getIV());

</span><span //</span><span 加密 </span>
<span $b</span> = <span $m</span>->encrypt(<span $a</span>, 'base64'<span ); 
</span><span //</span><span 解密 </span>
<span $c</span> = <span $m</span>->decrypt(<span $b</span>, 'base64'<span );

</span><span echo</span> '加密后:'<span ; 
</span><span var_dump</span>(<span $b</span><span ); 
</span><span echo</span> '解密后:'<span ; 
</span><span var_dump</span>(<span $c</span><span ); 
</span><span echo</span> '
Nach dem Login kopieren
';

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/767256.htmlTechArticle分享下php对称加密算法的实现代码。 KEY 是之前定义的常量 Mcrypt:: :: ('ROOT') or ('Access Denied' encrypt( (mcrypt_encrypt(MCRYPT_RIJNDAEL_256, ( ), , MCRYPT_M...
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage