首页 / 算法 / php对称加密算法的例子_PHP教程
php对称加密算法的例子_PHP教程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php对称加密算法的例子_PHP教程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7742字,纯文字阅读大概需要12分钟。
内容图文
![php对称加密算法的例子_PHP教程](/upload/InfoBanner/zyjiaocheng/183/0f9f063ce1fa43afbf1961104868fd26.jpg)
KEY 是之前定义的常量
Mcrypt::<span encrypt(); Mcrypt::<span decrypt(); <span defined('ROOT') or <span exit('Access Denied'<span ); <span class<span Mcrypt{ <span public <span static <span function encrypt(<span $code<span ){ <span return <span base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, <span md5(<span KEY), <span $code, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),<span MCRYPT_RAND))); } <span public <span static <span function decrypt(<span $code<span ){ <span return mcrypt_decrypt(MCRYPT_RIJNDAEL_256, <span md5(<span KEY), <span base64_decode(<span $code), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB),<span MCRYPT_RAND)); } }
<span 常用对称加密算法(DES/AES)类
xcrypt.php
<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 class<span Xcrypt{ <span private <span $mcrypt<span ; <span private <span $key<span ; <span private <span $mode<span ; <span private <span $iv<span ; <span private <span $blocksize<span ; <span /*<span * * 构造函数 * * @param string 密钥 * @param string 模式 * @param string 向量("off":不使用 / "auto":自动 / 其他:指定值,长度同密钥) <span */ <span public <span function __construct(<span $key, <span $mode = 'cbc', <span $iv = "off"<span ){ <span switch (<span strlen(<span $key<span )){ <span case 8: <span $this->mcrypt =<span MCRYPT_DES; <span break<span ; <span case 16: <span $this->mcrypt =<span MCRYPT_RIJNDAEL_128; <span break<span ; <span case 32: <span $this->mcrypt =<span MCRYPT_RIJNDAEL_256; <span break<span ; <span default: <span die("Key size must be 8/16/32"<span ); } www.jbxue.<span com <span $this-><span key = <span $key<span ; <span switch (<span strtolower(<span $mode<span )){ <span case 'ofb': <span $this->mode =<span MCRYPT_MODE_OFB; <span if (<span $iv == 'off') <span die('OFB must give a IV'); <span //<span OFB必须有向量 <span break<span ; <span case 'cfb': <span $this->mode =<span MCRYPT_MODE_CFB; <span if (<span $iv == 'off') <span die('CFB must give a IV'); <span //<span CFB必须有向量 <span break<span ; <span case 'ecb': <span $this->mode =<span MCRYPT_MODE_ECB; <span $iv = 'off'; <span //<span ECB不需要向量 <span break<span ; <span case 'cbc': <span default: <span $this->mode =<span MCRYPT_MODE_CBC; } <span switch (<span strtolower(<span $iv<span )){ <span case "off": <span $this->iv = <span null<span ; <span break<span ; <span case "auto": <span $source = <span PHP_OS=='WINNT' ? MCRYPT_RAND :<span MCRYPT_DEV_RANDOM; <span $this->iv = mcrypt_create_iv(mcrypt_get_block_size(<span $this->mcrypt, <span $this->mode), <span $source<span ); <span break<span ; <span default: <span $this->iv = <span $iv<span ; } } <span /*<span * * 获取向量值 * @param string 向量值编码(base64/hex/bin) * @return string 向量值 <span */ www.jbxue.<span com <span public <span function getIV(<span $code = 'base64'<span ){ <span switch (<span $code<span ){ <span case 'base64': <span $ret = <span base64_encode(<span $this-><span iv); <span break<span ; <span case 'hex': <span $ret = <span bin2hex(<span $this-><span iv); <span break<span ; <span case 'bin': <span default: <span $ret = <span $this-><span iv; } <span return <span $ret<span ; } <span /*<span * * 加密 * @param string 明文 * @param string 密文编码(base64/hex/bin) * @return string 密文 <span */ <span public <span function encrypt(<span $str, <span $code = 'base64'<span ){ <span if (<span $this->mcrypt == MCRYPT_DES) <span $str = <span $this->_pkcs5Pad(<span $str<span ); <span if (<span isset(<span $this-><span iv)) { <span $result = mcrypt_encrypt(<span $this->mcrypt, <span $this-><span key, <span $str, <span $this->mode, <span $this-><span iv); } <span else<span { @<span $result = mcrypt_encrypt(<span $this->mcrypt, <span $this-><span key, <span $str, <span $this-><span mode); } <span switch (<span $code<span ){ <span case 'base64': <span $ret = <span base64_encode(<span $result<span ); <span break<span ; <span case 'hex': <span $ret = <span bin2hex(<span $result<span ); <span break<span ; <span case 'bin': <span default: <span $ret = <span $result<span ; } <span return <span $ret<span ; } <span /*<span * * 解密 * @param string 密文 * @param string 密文编码(base64/hex/bin) * @return string 明文 <span */ <span public <span function decrypt(<span $str, <span $code = "base64"<span ){ <span $ret = <span false<span ; <span switch (<span $code<span ){ <span case 'base64': <span $str = <span base64_decode(<span $str<span ); <span break<span ; <span case 'hex': <span $str = <span $this->_hex2bin(<span $str<span ); <span break<span ; <span case 'bin': <span default:<span } <span if (<span $str !== <span false<span ){ <span if (<span isset(<span $this-><span iv)) { <span $ret = mcrypt_decrypt(<span $this->mcrypt, <span $this-><span key, <span $str, <span $this->mode, <span $this-><span iv); } <span else<span { @<span $ret = mcrypt_decrypt(<span $this->mcrypt, <span $this-><span key, <span $str, <span $this-><span mode); } <span if (<span $this->mcrypt == MCRYPT_DES) <span $ret = <span $this->_pkcs5Unpad(<span $ret<span ); <span $ret = <span trim(<span $ret<span ); } <span return <span $ret<span ; } <span private <span function _pkcs5Pad(<span $text<span ){ <span $this->blocksize = mcrypt_get_block_size(<span $this->mcrypt, <span $this-><span mode); <span $pad = <span $this->blocksize - (<span strlen(<span $text) % <span $this-><span blocksize); <span return <span $text . <span str_repeat(<span chr(<span $pad), <span $pad<span ); } <span private <span function _pkcs5Unpad(<span $text<span ){ <span $pad = <span ord(<span $text{<span strlen(<span $text) - 1<span }); <span if (<span $pad > <span strlen(<span $text)) <span return <span false<span ; <span if (<span strspn(<span $text, <span chr(<span $pad), <span strlen(<span $text) - <span $pad) != <span $pad) <span return <span false<span ; <span $ret = <span substr(<span $text, 0, -1 * <span $pad<span ); <span return <span $ret<span ; } <span private <span function _hex2bin(<span $hex = <span false<span ){ <span $ret = <span $hex !== <span false && <span preg_match('/^[0-9a-fA-F]+$/i', <span $hex) ? <span pack("H*", <span $hex) : <span false<span ; <span return <span $ret<span ; } }
<span 上面php加密算法类的使用方法
<?<span php <span header('Content-Type:text/html;Charset=utf-8;'<span ); <span include "xcrypt.php"<span ; <span echo ''<span ; <span $a = <span isset(<span $_GET['a']) ? <span $_GET['a'] : '测试123'<span ; <span //<span 密钥 <span $key = '12345678123456781234567812345678'; <span //<span 256 bit <span $key = '1234567812345678'; <span //<span 128 bit <span $key = '12345678'; <span //<span 64 bit //设置模式和IV <span $m = <span new Xcrypt(<span $key, 'cbc', 'auto'<span ); <span //<span 获取向量值 <span echo '向量:'<span ; <span var_dump(<span $m-><span getIV()); <span //<span 加密 <span $b = <span $m->encrypt(<span $a, 'base64'<span ); <span //<span 解密 <span $c = <span $m->decrypt(<span $b, 'base64'<span ); <span echo '加密后:'<span ; <span var_dump(<span $b<span ); <span echo '解密后:'<span ; <span var_dump(<span $c<span ); <span echo '';
http://www.bkjia.com/PHPjc/767256.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/767256.htmlTechArticle分享下php对称加密算法的实现代码。 KEY 是之前定义的常量 Mcrypt:: :: ('ROOT') or ('Access Denied' encrypt( (mcrypt_encrypt(MCRYPT_RIJNDAEL_256, ( ), , MCRYPT_M...
内容总结
以上是互联网集市为您收集整理的php对称加密算法的例子_PHP教程全部内容,希望文章能够帮你解决php对称加密算法的例子_PHP教程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。