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引用效率问题分析
Mar 23 PHP
浅析php面向对象public private protected 访问修饰符
Jun 30 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
Apr 25 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
php采集内容中带有图片地址的远程图片并保存的方法
Jan 03 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
PHP调用API接口实现天气查询功能的示例
Sep 21 PHP
ThinkPHP框架使用redirect实现页面重定向的方法实例分析
Apr 12 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 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
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
关于js数组去重的问题小结
2014/01/24 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
修改Jquery Dialog 位置的实现方法
2016/08/26 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
Vue监听数组变化源码解析
2017/03/09 Javascript
Node.js调试技术总结分享
2017/03/12 Javascript
JS变量及其作用域
2017/03/29 Javascript
纯原生js实现贪吃蛇游戏
2020/04/16 Javascript
Bootstrap响应式表格详解
2017/05/23 Javascript
详解axios 全攻略之基本介绍与使用(GET 与 POST)
2017/09/15 Javascript
Three.js加载外部模型的教程详解
2017/11/10 Javascript
在vue-cli项目中使用bootstrap的方法示例
2018/04/21 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
iconfont的三种使用方式详解
2018/08/05 Javascript
ant design vue中日期选择框混合时间选择器的用法说明
2020/10/27 Javascript
python的id()函数介绍
2013/02/10 Python
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Python实现一个转存纯真IP数据库的脚本分享
2017/05/21 Python
Python实现聊天机器人的示例代码
2018/07/09 Python
Python中常用的8种字符串操作方法
2019/05/06 Python
python中数组和矩阵乘法及使用总结(推荐)
2019/05/18 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
西班牙购买行李箱和背包网站:Maletas Greenwich
2019/10/08 全球购物
雷朋巴西官方商店:Ray-Ban Brasil
2020/07/21 全球购物
门卫岗位职责
2013/11/15 职场文书
营销人才自我鉴定范文
2013/12/25 职场文书
高校优秀辅导员事迹材料
2014/05/07 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
2016年幼儿园教师政治学习心得体会
2016/01/23 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL