最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP、Java des加密解密實例

 更新時間:2015年04月27日 09:53:34   投稿:junjie  
這篇文章主要介紹了PHP、Java des加密解密實例,des加密是對稱加密中在互聯(lián)網(wǎng)應(yīng)用的比較多的一種加密方式,本文分別給出了PHP和JAVA版本的實現(xiàn)代碼,需要的朋友可以參考下

des加密是對稱加密中在互聯(lián)網(wǎng)應(yīng)用的比較多的一種加密方式,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.";//需要加密的內(nèi)容 
echo ($text) . "\n"; 
 
$crypttext =base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv)); 
echo $crypttext . "\n";//加密后的內(nèi)容 
 
echo mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,base64_decode($crypttext),MCRYPT_MODE_ECB,$iv);//解密后的內(nèi)容 

在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寫的,對接的過程中就發(fā)現(xiàn)機加密后的內(nèi)容對方解密不了,這是因為Php跟java在實現(xiàn)這個算法的時候有差別,要想正確加密解密需要兩邊都做下處理:

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)); 
         
             
    }    

相關(guān)文章

  • ThinkPHP3.1新特性之查詢條件預處理簡介

    ThinkPHP3.1新特性之查詢條件預處理簡介

    相比于ThinkPHP3.0版本對數(shù)組方式的查詢條件會進行安全過濾而不支持字符串條件的安全過濾的情況,ThinkPHP3.1版本則增加了對條件字符串進行預處理的支持,讓ORM的安全性更加得以保證。這篇文章主要介紹了ThinkPHP3.1的查詢條件預處理,需要的朋友可以參考下
    2014-06-06
  • php開發(fā)論壇系統(tǒng)

    php開發(fā)論壇系統(tǒng)

    這篇文章主要介紹了php做論壇系統(tǒng),本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • 深入PHP異步執(zhí)行的詳解

    深入PHP異步執(zhí)行的詳解

    本篇文章是對PHP的異步執(zhí)行進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • php實現(xiàn)銀聯(lián)商務(wù)公眾號+服務(wù)窗支付的示例代碼

    php實現(xiàn)銀聯(lián)商務(wù)公眾號+服務(wù)窗支付的示例代碼

    這篇文章主要介紹了php實現(xiàn)銀聯(lián)商務(wù)公眾號+服務(wù)窗支付的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • 基于php偽靜態(tài)的實現(xiàn)詳細介紹

    基于php偽靜態(tài)的實現(xiàn)詳細介紹

    本篇文章介紹了,基于php偽靜態(tài)的實現(xiàn)詳細分析。需要的朋友參考下
    2013-04-04
  • Yii中使用PHPExcel導出Excel的方法

    Yii中使用PHPExcel導出Excel的方法

    這篇文章主要介紹了Yii中使用PHPExcel導出Excel的方法,涉及Yii中針對PHPExcel的設(shè)置以及相關(guān)文件的修改技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-12-12
  • php處理restful請求的路由類分享

    php處理restful請求的路由類分享

    利用路由表與restful url進行匹配,分發(fā)到不同的action處理,最基本的實現(xiàn),只考慮路由分發(fā)功能
    2014-02-02
  • ThinkPHP有變量的where條件分頁實例

    ThinkPHP有變量的where條件分頁實例

    這篇文章主要介紹了ThinkPHP有變量的where條件分頁方法,實例講述了ThinkPHP條件查詢與分頁的技巧,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • 使用php操作xml教程

    使用php操作xml教程

    這篇文章主要介紹了使用php操作xml教程,本篇文章通過簡要的案例和文檔描述,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Codeigniter出現(xiàn)錯誤提示Error with CACHE directory的解決方案

    Codeigniter出現(xiàn)錯誤提示Error with CACHE directory的解決方案

    這篇文章主要介紹了Codeigniter出現(xiàn)錯誤提示Error with CACHE directory的解決方案,需要的朋友可以參考下
    2014-06-06

最新評論

钟祥市| 永德县| 大田县| 丁青县| 牡丹江市| 会东县| 雷波县| 樟树市| 通许县| 达孜县| 湘潭市| 裕民县| 承德县| 濉溪县| 太原市| 鄂尔多斯市| 嘉义市| 仁化县| 漾濞| 磴口县| 顺平县| 淄博市| 大余县| 乐至县| 登封市| 清河县| 文安县| 中牟县| 时尚| 双桥区| 新安县| 始兴县| 兰州市| 松阳县| 武穴市| 浑源县| 青浦区| 巴塘县| 当阳市| 灵台县| 锦州市|