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
Dec 14 PHP
php mysql数据库操作类
Jun 04 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
php基础教程 php内置函数实例教程
Aug 21 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
php判断文件上传类型及过滤不安全数据的方法
Dec 17 PHP
简单谈谈php浮点数精确运算
Mar 10 PHP
php 使用redis锁限制并发访问类示例
Nov 02 PHP
浅析php中array_map和array_walk的使用对比
Nov 20 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 PHP
使用 PHP Masked Package 屏蔽敏感数据的实现方法
Oct 15 PHP
PHP ob缓存以及ob函数原理实例解析
Nov 13 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导入excel文件到mysql数据库的方法
2015/01/14 PHP
jquery+php实现导出datatables插件数据到excel的方法
2015/07/06 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP中quotemeta()函数的用法讲解
2019/04/04 PHP
JQuery选择器特辑 详细小结
2012/05/14 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
PHP开发者必须掌握的6个关键字
2014/04/14 Javascript
用原生js做个简单的滑动效果的回到顶部
2014/10/15 Javascript
jQuery带箭头提示框tooltips插件集锦
2014/11/17 Javascript
node.js中的fs.readdir方法使用说明
2014/12/17 Javascript
jQuery基于ajax实现星星评论代码
2015/08/07 Javascript
浅谈javascript中new操作符的原理
2016/06/07 Javascript
JavaScript必看小技巧(必看)
2016/06/07 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
Bootstrap3 多个模态对话框无法显示的解决方案
2017/02/23 Javascript
Vue.use源码分析
2017/04/22 Javascript
vue iview组件表格 render函数的使用方法详解
2018/03/15 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
mpvue 单文件页面配置详解
2018/12/02 Javascript
使用python在校内发人人网状态(人人网看状态)
2014/02/19 Python
python实现定时同步本机与北京时间的方法
2015/03/24 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
python生成以及打开json、csv和txt文件的实例
2018/11/16 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
使用Python opencv实现视频与图片的相互转换
2019/07/08 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
举例详解HTML5中使用JSON格式提交表单
2015/06/16 HTML / CSS
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
FragranceNet中文网:北美健康美容线上零售商
2020/08/26 全球购物
Expedia瑞典官网:预订度假屋、酒店、汽车租赁、机票等
2021/01/23 全球购物
布达拉宫的导游词
2015/02/02 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
MySql分区类型及创建分区的方法
2022/04/13 MySQL
JS前端使用canvas实现扩展物体类和事件派发
2022/08/05 Javascript