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 Zip解压 文件在线解压缩的函数代码
May 26 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php 记录进行累加并显示总时长为秒的结果
Nov 04 PHP
深入PHP操作MongoDB的技术总结
Jun 02 PHP
php递归遍历多维数组的方法
Apr 18 PHP
PHP5.2下preg_replace函数的问题
May 08 PHP
PHP按指定键值对二维数组进行排序的方法
Dec 22 PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 PHP
PHP模型Model类封装数据库操作示例
Mar 14 PHP
smarty模板的使用方法实例分析
Sep 18 PHP
PHP获取当前时间不准确问题解决方案
Aug 14 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/06/28 PHP
PHP 冒泡排序 二分查找 顺序查找 二维数组排序算法函数的详解
2013/06/25 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2012/01/21 Javascript
Jquery对数组的操作技巧整理
2014/03/25 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
jQuery使用post方法提交数据实例
2015/03/25 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
jquery.zclip轻量级复制失效问题
2017/01/08 Javascript
基于zepto.js实现登录界面
2017/10/09 Javascript
深入理解vue中slot与slot-scope的具体使用
2018/01/26 Javascript
解决vue中使用Axios调用接口时出现的ie数据处理问题
2018/08/13 Javascript
详解在Node.js中发起HTTP请求的5种方法
2019/01/10 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
python实现马耳可夫链算法实例分析
2015/05/20 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
自我评价范文分享
2014/01/04 职场文书
父母寄语大全
2014/04/12 职场文书
宿舍标语大全
2014/06/19 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
批评与自我批评范文
2014/10/15 职场文书
房屋产权证明书
2014/10/15 职场文书
家长学校教学计划
2015/01/19 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
2015年学校教科室工作总结
2015/07/20 职场文书
公司酒会致辞
2015/07/30 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers
HTML中的表单元素介绍
2022/02/28 HTML / CSS