php 生成 加密 压缩,PHP_PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文),复制代码 代码如下:// +---------- - phpStudy...

PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)

复制代码 代码如下:

// +----------------------------------------------------------------------+

// | Willko Framework |

// +----------------------------------------------------------------------+

// | Copyright (c) 2008-2009 Willko Cheng |

// +----------------------------------------------------------------------+

// | Authors: Willko Cheng |

// +----------------------------------------------------------------------+

// $string 明文 或 密文

// $isEncrypt 是否加密

// $key 密匙

// 采用SHA1生成密匙簿,超过300个字符使用ZLIB压缩

function dencrypt($string, $isEncrypt = true, $key = KEY_SPACE) {

if (!isset($string{0}) || !isset($key{0})) {

return false;

}

$dynKey = $isEncrypt ? hash('sha1', microtime(true)) : substr($string, 0, 40);

$fixedKey = hash('sha1', $key);

$dynKeyPart1 = substr($dynKey, 0, 20);

$dynKeyPart2 = substr($dynKey, 20);

$fixedKeyPart1 = substr($fixedKey, 0, 20);

$fixedKeyPart2 = substr($fixedKey, 20);

$key = hash('sha1', $dynKeyPart1 . $fixedKeyPart1 . $dynKeyPart2 . $fixedKeyPart2);

$string = $isEncrypt ? $fixedKeyPart1 . $string . $dynKeyPart2 : (isset($string{339}) ? gzuncompress(base64_decode(substr($string, 40))) : base64_decode(substr($string, 40)));

$n = 0;

$result = '';

$len = strlen($string);

for ($n = 0; $n < $len; $n++) {

$result .= chr(ord($string{$n}) ^ ord($key{$n % 40}));

}

return $isEncrypt ? $dynKey . str_replace('=', '', base64_encode($n > 299 ? gzcompress($result) : $result)) : substr($result, 20, -20);

}相关阅读:

CSS经验:ul列表不正确使用的趋势

解读PHP冒泡排序技巧

javascript下利用arguments实现string.format函数

Mysql数据库名和表名在不同系统下的大小写敏感问题

CSS解决方案:IE6中遇到png兼容性

一条一条新闻向上的滚动 不错" target="_blank">一条一条新闻向上的滚动 不错

通过宜家的家具设计方法学习CSS模块化

用vbs实现禁用服务

用ASP.Net写一个发送ICQ信息的程序

css实现的图片模糊效果

jQuery的学习步骤

JavaScript通过attachEvent和detachEvent方法处理带参数的函数

php中全局变量global的使用演示代码

CSS设计网站导航菜单的四种优势

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我理解了你的问题。关于 PHP 中如何使用 AES/CBC/PKCS7Padding 进行加密/解密,可以使用 PHP OpenSSL 库来实现。以下是一个简单的示例代码: ```php <?php /** * AES加密 * @param string $data 要加密的数据 * @param string $key 密钥 * @param string $iv 初始化向量 * @return string */ function aes_encrypt($data, $key, $iv) { // PKCS7Padding 填充方式 $block_size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $padding = $block_size - (strlen($data) % $block_size); $data .= str_repeat(chr($padding), $padding); // 加密 $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); mcrypt_generic_init($cipher, $key, $iv); $encrypted = mcrypt_generic($cipher, $data); mcrypt_generic_deinit($cipher); mcrypt_module_close($cipher); return base64_encode($encrypted); } /** * AES解密 * @param string $data 要解密的数据 * @param string $key 密钥 * @param string $iv 初始化向量 * @return string */ function aes_decrypt($data, $key, $iv) { // 解密 $cipher = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); mcrypt_generic_init($cipher, $key, $iv); $decrypted = mdecrypt_generic($cipher, base64_decode($data)); mcrypt_generic_deinit($cipher); mcrypt_module_close($cipher); // 去掉 PKCS7Padding 填充 $padding = ord($decrypted[strlen($decrypted)-1]); return substr($decrypted, 0, -$padding); } // 测试 $key = '1234567890123456'; // 密钥必须为16、24或32个字符 $iv = '1234567890123456'; // 初始化向量必须为16个字符 $data = 'Hello, world!'; $cipher_text = aes_encrypt($data, $key, $iv); $plain_text = aes_decrypt($cipher_text, $key, $iv); echo '明文: ' . $data . "\n"; echo '密文: ' . $cipher_text . "\n"; echo '解密后: ' . $plain_text . "\n"; ``` 需要注意几点: 1. 密钥必须为 16、24 或 32 个字符,初始化向量必须为 16 个字符,可以根据需要修改。 2. 在加密时需要进行 PKCS7Padding 填充,解密后需要去除填充。 3. 需要安装 PHP OpenSSL 扩展库,才能使用 mcrypt 函数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值