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 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
php下几个常用的去空、分组、调试数组函数
Feb 22 PHP
php数组函数序列之array_pop() - 删除数组中的最后一个元素
Nov 07 PHP
PHP正则表达式之定界符和原子介绍
Oct 05 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
CI框架数据库查询之join用法分析
May 18 PHP
PHP实现带重试功能的curl连接示例
Jul 28 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
PHP获取指定日期是星期几的实现方法
Nov 30 PHP
php使用正则表达式获取字符串中的URL
Dec 29 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
杏林同学录(七)
2006/10/09 PHP
表单复选框向PHP传输数据的代码
2007/11/13 PHP
php array_slice函数的使用以及参数详解
2008/08/30 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
Angular2生命周期钩子函数的详细介绍
2017/07/10 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
轻量级富文本编辑器wangEditor结合vue使用方法示例
2018/10/10 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
vue和better-scroll实现列表左右联动效果详解
2019/04/29 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
javascript的delete运算符知识点总结
2019/11/19 Javascript
Vue实现手机计算器
2020/08/17 Javascript
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python列表和元组的定义与使用操作示例
2017/07/26 Python
解决pandas read_csv 读取中文列标题文件报错的问题
2018/06/15 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python打包方法Pyinstaller的使用
2018/10/09 Python
Python字符串处理的8招秘籍(小结)
2019/08/13 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
python中对二维列表中一维列表的调用方法
2020/06/07 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
机关门卫的岗位职责
2014/04/29 职场文书
国际贸易专业求职信
2014/06/04 职场文书
镇创先争优活动总结
2014/08/28 职场文书
四大名著读书笔记
2015/06/25 职场文书