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 相关文章推荐
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
关于页面优化和伪静态
Oct 11 PHP
dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)
Oct 29 PHP
PHP 命名空间实例说明
Jan 27 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
Jun 19 PHP
PHP中把错误日志保存在系统日志中(Windows系统)
Jun 23 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
Nov 08 PHP
thinkPHP框架中执行事务的方法示例
May 31 PHP
PHP基于openssl实现的非对称加密操作示例
Jan 11 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
tp5使用layui实现多个图片上传(带附件选择)的方法实例
Nov 17 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实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php $_SESSION会员登录实例分享
2021/01/19 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
jquery 表格分页等操作实现代码(pagedown,pageup)
2010/04/11 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
2013/05/08 Javascript
从jquery的过滤器.filter()方法想到的
2013/09/29 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
flag和jq on 的绑定多个对象和方法(必看)
2017/02/27 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
深入理解 TypeScript Reflect Metadata
2019/12/12 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
Python实现从百度API获取天气的方法
2015/03/11 Python
Python使用defaultdict读取文件各列的方法
2017/05/11 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
python关于倒排列的知识点总结
2020/10/13 Python
windows+vscode安装paddleOCR运行环境的步骤
2020/11/11 Python
canvas实现圆绘制的示例代码
2019/09/11 HTML / CSS
巴西女装购物网站:Eclectic
2018/04/24 全球购物
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
教育技术职业规划范文
2014/03/04 职场文书
学校评语大全
2014/05/06 职场文书
《多彩的民间艺术》教学反思
2016/02/16 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis