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查询搜索引擎排名位置的代码
Jan 05 PHP
php实现文件下载更能介绍
Nov 23 PHP
php获取文件大小的方法
Feb 26 PHP
php将字符串全部转换成大写或者小写的方法
Mar 17 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
php实现微信公众平台账号自定义菜单类
Oct 11 PHP
php+ajax无刷新分页实例详解
Dec 07 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
php生成带logo二维码方法小结
Apr 08 PHP
php面向对象编程self和static的区别
May 08 PHP
thinkPHP的表达式查询用法详解
Sep 14 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 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
mysql+php分页类(已测)
2008/03/31 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
PHP使用递归算法无限遍历数组示例
2017/01/13 PHP
javascript 验证日期的函数
2010/03/18 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
2013/06/29 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
javascript实现博客园页面右下角返回顶部按钮
2015/02/22 Javascript
JavaScript动态改变表格单元格内容的方法
2015/03/30 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
Bootstrap select下拉联动(jQuery cxselect)
2017/01/04 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Python使用分布式锁的代码演示示例
2018/07/30 Python
详解如何为eclipse安装合适版本的python插件pydev
2018/11/04 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
python框架flask表单实现详解
2019/11/04 Python
django ORM之values和annotate使用详解
2020/05/19 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
python利用后缀表达式实现计算器功能
2021/02/22 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
实习教师自我鉴定
2013/12/09 职场文书
银行介绍信范文
2014/01/10 职场文书
党员公开承诺书和承诺事项
2014/03/25 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL