php blowfish加密解密算法


Posted in PHP onJuly 02, 2016

PHP Blowfish 算法的加密解密,供大家参考,具体内容如下

<?php
 
/**
 * php blowfish 算法
 * Class blowfish
 */
class blowfish{
 /**
  * blowfish + cbc模式 + pkcs5补码 加密
  * @param string $str 需要加密的数据
  * @return string 加密后base64加密的数据
  */
 public function blowfish_cbc_pkcs5_encrypt($str)
 {
  $cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
 
  //pkcs5补码
  $size = mcrypt_get_block_size(MCRYPT_BLOWFISH, MCRYPT_MODE_CBC);
  $str = $this->pkcs5_pad($str, $size);
 
  if (mcrypt_generic_init($cipher, $this->key, $this->iv) != -1)
  {
   $cipherText = mcrypt_generic($cipher, $str);
   mcrypt_generic_deinit($cipher);
 
   return base64_encode($cipherText);
  }
 
  mcrypt_module_close($cipher);
 }
 
 /**
  * blowfish + cbc模式 + pkcs5 解密 去补码
  * @param string $str 加密的数据
  * @return string 解密的数据
  */
 public function blowfish_cbc_pkcs5_decrypt($str)
 {
  $cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
 
  if (mcrypt_generic_init($cipher, $this->key, $this->iv) != -1)
  {
   $cipherText = mdecrypt_generic($cipher, base64_decode($str));
   mcrypt_generic_deinit($cipher);
 
   return $this->pkcs5_unpad($cipherText);
  }
 
  mcrypt_module_close($cipher);
 }
 
 private function pkcs5_pad($text, $blocksize){
  $pad = $blocksize - (strlen ( $text ) % $blocksize);
  return $text . str_repeat ( chr ( $pad ), $pad );
 }
 
 private function pkcs5_unpad($str){
  $pad = ord($str[($len = strlen($str)) - 1]);
  return substr($str, 0, strlen($str) - $pad);
 }
}

BlowFish加密算法在php的使用第二例

<?php
 
 $cipher = mcrypt_module_open(MCRYPT_BLOWFISH, '', MCRYPT_MODE_CBC, '');
  
 // The block-size of the Blowfish algorithm is 64-bits, therefore our IV
 // is always 8 bytes:
 $iv = '12345678';
 
 $key256 = '1234567890123456ABCDEFGHIJKLMNOP';
 $key128 = '1234567890123456';
 
 printf("iv: %s\n",bin2hex($iv));
 printf("key256: %s\n",bin2hex($key256));
 printf("key128: %s\n",bin2hex($key128));
 
 $cleartext = 'The quick brown fox jumped over the lazy dog';
 printf("clearText: %s\n\n",$cleartext);
  
 // Do 256-bit blowfish encryption:
 // The strengh of the encryption is determined by the length of the key
 // passed to mcrypt_generic_init
 if (mcrypt_generic_init($cipher, $key256, $iv) != -1)
 {
  // PHP pads with NULL bytes if $cleartext is not a multiple of the block size..
  $cipherText = mcrypt_generic($cipher,$cleartext );
  mcrypt_generic_deinit($cipher);
  
  // Display the result in hex.
  printf("256-bit blowfish encrypted:\n%s\n\n",bin2hex($cipherText));
 }
 
 // 128-bit blowfish encryption:
 if (mcrypt_generic_init($cipher, $key128, $iv) != -1)
 {
  // PHP pads with NULL bytes if $cleartext is not a multiple of the block size..
  $cipherText = mcrypt_generic($cipher,$cleartext );
  mcrypt_generic_deinit($cipher);
  
  // Display the result in hex.
  printf("128-bit blowfish encrypted:\n%s\n\n",bin2hex($cipherText));
 }
 
 // -------
 // Results
 // -------
 // You may use these as test vectors for testing your Blowfish implementations...
 // 
 // iv: 3132333435363738
 // key256: 313233343536373839303132333435364142434445464748494a4b4c4d4e4f50
 // key128: 31323334353637383930313233343536
 // clearText: The quick brown fox jumped over the lazy dog
 // 
 // 256-bit blowfish encrypted:
 // 276855ca6c0d60f7d9708210440c1072e05d078e733b34b4198d609dc2fcc2f0c30926cdef3b6d52baf6e345aa03f83e
 // 
 // 128-bit blowfish encrypted:
 // d2b5abb73208aea3790621d028afcc74d8dd65fb9ea8e666444a72523f5ecca60df79a424e2c714fa6efbafcc40bdca0 
 
?>

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
我常用的几个类
Oct 09 PHP
检测png图片是否完整的php代码
Sep 06 PHP
PHP容易被忽略而出错陷阱 数字与字符串比较
Nov 10 PHP
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
PHP实现HTML页面静态化的方法
Nov 04 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
PHP序列化/对象注入漏洞分析
Apr 18 PHP
php微信开发之上传临时素材
Jun 24 PHP
ThinkPHP5框架缓存查询操作分析
May 30 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
Sep 10 PHP
laravel 实现用户登录注销并限制功能
Oct 24 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 #PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 #PHP
PHP读书笔记整理_结构语句详解
Jul 01 #PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 #PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 #PHP
PHP读书笔记_运算符详解
Jul 01 #PHP
php+MySql实现登录系统与输出浏览者信息功能
Jul 01 #PHP
You might like
PHP怎样调用MSSQL的存储过程
2006/10/09 PHP
扩展你的 PHP 之入门篇
2006/12/04 PHP
详解Window7 下开发php扩展
2015/12/31 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
js onclick事件传参讲解
2013/11/06 Javascript
javascript中Number对象的toString()方法分析
2014/12/20 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
javascript电商网站抢购倒计时效果实现
2015/11/19 Javascript
JS实现的颜色实时渐变效果完整实例
2016/03/25 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
AngularJs 国际化(I18n/L10n)详解
2016/09/01 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
浅谈angular2路由预加载策略
2017/10/04 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
vue实现动态列表点击各行换色的方法
2018/09/13 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
python检测服务器是否正常
2014/02/16 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
python tkinter实现屏保程序
2019/07/30 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
社会保险接收函
2014/01/12 职场文书
党风廉政承诺书
2014/03/27 职场文书
神秘岛读书笔记
2015/07/01 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python
php修改word的实例方法
2021/11/17 PHP