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 19 PHP
php项目打包方法
Feb 18 PHP
php的declare控制符和ticks教程(附示例)
Mar 21 PHP
Codeigniter注册登录代码示例
Jun 12 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
ThinkPHP之R方法实例详解
Jun 20 PHP
php使用session二维数组实例
Nov 06 PHP
php页面缓存方法小结
Jan 10 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
Laravel 5.3 学习笔记之 安装
Aug 28 PHP
PHP递归实现汉诺塔问题的方法示例
Nov 25 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 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/12/05 PHP
PHP 出现乱码和Sessions验证问题的解决方法!
2008/12/06 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
CI框架源码解读之URI.php中_fetch_uri_string()函数用法分析
2016/05/18 PHP
PHP ADODB实现事务处理功能示例
2018/05/25 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
js 与 php 通过json数据进行通讯示例
2014/03/26 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
Bootstrap3 datetimepicker控件使用实例
2016/12/13 Javascript
使用 vue-i18n 切换中英文效果
2018/05/23 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
Python下载指定页面上图片的方法
2016/05/12 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
python使用Matplotlib画饼图
2018/09/25 Python
python sqlite的Row对象操作示例
2019/09/11 Python
Django 自定义分页器的实现代码
2019/11/24 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
Python使用requests模块爬取百度翻译
2020/08/25 Python
Python LMDB库的使用示例
2021/02/14 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
Kipling澳洲官网:购买凯浦林包包
2020/12/17 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
企业法人授权委托书
2014/04/03 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
大学生国家助学金感谢信
2015/01/23 职场文书
放假通知范文
2015/04/14 职场文书
护士岗位竞聘书
2015/09/15 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
深入浅出的讲解:信号调制到底是如何实现的
2022/02/18 无线电