PHP、Java des加密解密实例


Posted in PHP onApril 27, 2015

des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库

下面是加密解密的实例

$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);  

$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);  

$key = "This is a very secret key";//密钥  

$text = "Meet me at 11 o'clock behind the monument.";//需要加密的内容  

echo ($text) . "\n";  

  

$crypttext =base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv));  

echo $crypttext . "\n";//加密后的内容  

  

echo mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,base64_decode($crypttext),MCRYPT_MODE_ECB,$iv);//解密后的内容 

在AES加密算法中通常会用到MCRYPT_RIJNDAEL_128、MCRYPT_RIJNDAEL_192、MCRYPT_RIJNDAEL_256三种,后面的128、192、256代表的是秘钥(也就是加密的Key)是多少bit的,比如使用的是MCRYPT_RIJNDAEL_128,那么用这个算法加密时秘钥长度就是128bit的,比如 $key = 'fjjda0&9^$$#+*%$fada',是20个字符,那在实际加密的时候只用到前16个字符加密(16*8=128),不足128bit的php中会用'\0'来补齐。

有的时候做项目对接的时候,可能你用的是Php加密的,而对方用的是java写的,对接的过程中就发现机加密后的内容对方解密不了,这是因为Php跟java在实现这个算法的时候有差别,要想正确加密解密需要两边都做下处理:

PHP:

<?php  

class Security {  

    public static function encrypt($input, $key) {  

        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);  

        $input = Security::pkcs5_pad($input, $size);  

        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');  

        $iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);  

        mcrypt_generic_init($td, $key, $iv);  

        $data = mcrypt_generic($td, $input);  

        mcrypt_generic_deinit($td);  

        mcrypt_module_close($td);  

        $data = base64_encode($data);  

        return $data;  

    }  

   

    private static function pkcs5_pad ($text, $blocksize) {  

        $pad = $blocksize - (strlen($text) % $blocksize);  

        return $text . str_repeat(chr($pad), $pad);  

    }  

   

    public static function decrypt($sStr, $sKey) {  

        $decrypted= mcrypt_decrypt(  

        MCRYPT_RIJNDAEL_128,  

        $sKey,  

        base64_decode($sStr),  

        MCRYPT_MODE_ECB  

    );  

   

        $dec_s = strlen($decrypted);  

        $padding = ord($decrypted[$dec_s-1]);  

        $decrypted = substr($decrypted, 0, -$padding);  

        return $decrypted;  

    }     

}  

   

   

   

$key = "1234567891234567";  

$data = "example";  

   

$value = Security::encrypt($data , $key );  

echo $value.'<br/>';  

echo Security::decrypt($value, $key ); 

Java:
import javax.crypto.Cipher;  

import javax.crypto.spec.SecretKeySpec;  

   

import org.apache.commons.codec.binary.Base64;  

   

public class Security {  

    public static String encrypt(String input, String key){  

        byte[] crypted = null;  

        try{  

            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");  

            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");  

            cipher.init(Cipher.ENCRYPT_MODE, skey);  

            crypted = cipher.doFinal(input.getBytes());  

        }catch(Exception e){  

        System.out.println(e.toString());  

    }  

    return new String(Base64.encodeBase64(crypted));  

}  

   

    public static String decrypt(String input, String key){  

        byte[] output = null;  

        try{  

            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");  

            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");  

            cipher.init(Cipher.DECRYPT_MODE, skey);  

            output = cipher.doFinal(Base64.decodeBase64(input));  

            }catch(Exception e){  

            System.out.println(e.toString());  

        }  

        return new String(output);  

    }  

   

    public static void main(String[] args) {  

        String key = "1234567891234567";  

        String data = "example";  

          

        System.out.println(Security.encrypt(data, key));  

          

        System.out.println(Security.decrypt(Security.encrypt(data, key), key));  

          

              

    }     

} 
PHP 相关文章推荐
如何利用php+mysql保存和输出文件
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
php全排列递归算法代码
Oct 09 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
php实现复制移动文件的方法
Jul 29 PHP
ThinkPHP数据操作方法总结
Sep 28 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
CMSPRESS 10行代码搞定 PHP无限级分类2
Mar 30 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
Aug 04 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 #PHP
php curl 获取https请求的2种方法
Apr 27 #PHP
PHP curl伪造IP地址和header信息代码实例
Apr 27 #PHP
JavaScript实现滚动栏效果的方法
Apr 27 #PHP
php curl 上传文件代码实例
Apr 27 #PHP
php把大写命名转换成下划线分割命名
Apr 27 #PHP
PHP加密解密字符串汇总
Apr 26 #PHP
You might like
用php实现百度网盘图片直链的代码分享
2012/11/01 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
2015/11/19 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
js中用window.open()打开多个窗口的name问题
2014/03/13 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
javascript事件冒泡实例分析
2015/05/13 Javascript
Bootstrap+jfinal实现省市级联下拉菜单
2016/05/30 Javascript
AngularJs  Using $location详解及示例代码
2016/09/02 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
JS基于面向对象实现的拖拽功能示例
2016/12/20 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
jQuery实现简单日期格式化功能示例
2017/09/19 jQuery
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
微信小程序实现聊天对话(文本、图片)功能
2018/07/06 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
javascript实现图片轮播代码
2019/07/09 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
jQuery实现王者荣耀手风琴效果
2020/01/17 jQuery
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python numpy实现文件存取的示例代码
2019/05/26 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
劳力士官方珠宝商:J.R. Dunn Jewelers
2018/09/29 全球购物
大学生个人求职信范文
2013/09/21 职场文书
护士自我鉴定范文
2013/10/06 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
成都人事代理协议书
2014/10/25 职场文书
小学教师读书笔记
2015/07/01 职场文书