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 相关文章推荐
如何获得PHP相关资料
Oct 09 PHP
打造计数器DIY三步曲(中)
Oct 09 PHP
PHP伪静态页面函数附使用方法
Jun 20 PHP
php XMLWriter类的简单示例代码(RSS输出)
Sep 30 PHP
php通过文件流方式复制文件的方法
Mar 13 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
golang 调用 php7详解及实例
Jan 04 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
YII框架中使用memcache的方法详解
Aug 02 PHP
PHP面向对象程序设计中的self、static、parent关键字用法分析
Aug 14 PHP
微信小程序结合ThinkPHP5授权登陆后获取手机号
Nov 23 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程序报date()警告的处理(date_default_timezone_set)
2013/10/22 PHP
php 启动时报错的简单解决方法
2014/01/27 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
PHP对文件夹递归执行chmod命令的方法
2015/06/19 PHP
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
Bootstrap CSS布局之表单
2016/12/17 Javascript
ionic开发中点击input时键盘自动弹出
2016/12/23 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
解决ie img标签内存泄漏的问题
2017/10/13 Javascript
在vue2.0中引用element-ui组件库的方法
2018/06/21 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
Python 探针的实现原理
2016/04/23 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
【python】matplotlib动态显示详解
2019/04/11 Python
python默认参数调用方法解析
2020/02/09 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Django CSRF认证的几种解决方案
2020/03/03 Python
利用PyTorch实现VGG16教程
2020/06/24 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
会议开场欢迎词
2014/01/15 职场文书
班主任自我评价范文
2015/03/11 职场文书
2015年基层党支部工作总结
2015/05/21 职场文书
新员工试用期工作总结2015
2015/05/28 职场文书
茶花女读书笔记
2015/06/29 职场文书
Nginx虚拟主机的配置步骤过程全解
2022/03/31 Servers