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 相关文章推荐
怎样在UNIX系统下安装MySQL
Oct 09 PHP
自己在做项目过程中学到的PHP知识收集
Aug 20 PHP
请离开include_once和require_once
Jul 18 PHP
PHP中文编码小技巧
Dec 25 PHP
PHP生成树的方法
Jul 28 PHP
WordPress主题制作之模板文件的引入方法
Dec 28 PHP
Yii调试查看执行SQL语句的方法
Jul 15 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 PHP
PHP获取类私有属性的3种方法
Sep 10 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
3.从实例开始
2006/10/09 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
php数组合并的二种方法
2014/03/21 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
初学Javascript的一些总结
2008/11/03 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
node.js中的fs.readlinkSync方法使用说明
2014/12/17 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
微信小程序使用slider设置数据值及switch开关组件功能【附源码下载】
2017/12/09 Javascript
详解angularjs跨页面传参遇到的一些问题
2018/11/01 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
Vue+Element-UI实现上传图片并压缩
2019/11/26 Javascript
[19:24]DOTA2客户端使用指南 一分钟快速设置轻松超神
2013/09/24 DOTA
[01:11:10]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG加赛
2014/05/26 DOTA
python使用递归解决全排列数字示例
2014/02/11 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python实现调度算法代码详解
2017/12/01 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
python实现监控阿里云账户余额功能
2019/12/16 Python
Python实现点云投影到平面显示
2020/01/18 Python
李宁官方网店:中国运动品牌
2017/11/02 全球购物
英国婚礼商城:Wedding Mall
2019/11/02 全球购物
俄罗斯在线服装店:STOLNIK
2021/03/07 全球购物
迅雷Cued工作心得体会
2014/01/27 职场文书
《问银河》教学反思
2014/02/19 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
JavaScript文档对象模型DOM
2021/11/20 Javascript