1. 程式人生 > >php des 加密解密例項

php des 加密解密例項

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 des 加密解密例項

des加密是對稱加密中在網際網路應用的比較多的一種加密方式,php 通過mcrypt擴充套件庫來支援des加密,要在Php中使用des加密,需要先安裝mcrypt擴充套件庫 下面是加密解密的例項 $iv_size = mcrypt_get_iv_size(MCRYPT

java php DES 加密解密

Java程式碼   import java.io.IOException;   import java.security.SecureRandom;   import javax.crypto.Cipher;   import javax.crypto.SecretKey;   import jav

PHP DES加密解密

這是一段 DES 解密的 PHP 程式碼。  參考自 http://php.net/manual/zh/function.mcrypt-module-open.php 中的例程。 本來也 沒有什麼難的。  但是我 解密 完 後 反覆試,都是下面 這樣的不可見 的亂碼。 �

PHP DES加密解密

今天寫App介面的時候需要傳遞加密資料給APP端,於是就寫了下面的DES加密類,親測正確程式碼如下 class CryptDes { function __construct(){ $this->key = 'codelovers'; //金

php des 加密解密函式 mcrypt

/**************************** 加解密 *************************************/ //des 加密函式 function do_encrypt($str, $key, $cipher = MCRYPT_DES

php rsa加密解密例項(非對稱加密

php服務端與客戶端互動、提供開放api時,通常需要對敏感的部分api資料傳輸進行資料加密,這時候rsa非對稱加密就能派上用處了,下面通過一個例子來說明如何用php來實現資料的加密解密 1、加密解密的第一步是生成公鑰、私鑰對,私鑰加密的內容能通過公鑰解密(反過來亦可以

php rsa加密解密例項

php服務端與客戶端互動、提供開放api時,通常需要對敏感的部分api資料傳輸進行資料加密,這時候rsa非對稱加密就能派上用處了,下面通過一個例子來說明如何用php來實現資料的加密解密 1、加密解密的第一步是生成公鑰、私鑰對,私鑰加密的內容能通過公鑰解密(反過來亦可以)

php和c#一致的DES加密解密演算法類

DES加解密演算法,在C#與PHP中的通用類。 注意: 1、類中的祕鑰key跟向量iv,均用的同樣的值 2、編碼均採用的utf-8 以下為具體程式碼,可以直接複製去進行實際測試 C#版程式碼: using System; using System.Data;

PHP、JAVA、C#、Object-C、Android 通用的DES加密解密

PHP加密解密: class JoDES { private static $_instance = NULL; /** * @return JoDES */ public static function sh

php實現和c#一致的DES加密解密php中呼叫方法)

php實現和c#一致的DES加密解密,可以從網上搜到一大堆,但是測試後發現都沒法用。以下正確程式碼是我經過苦苦才找到的。希望大家在系統整合時能用的上。<p>注意:key的長度為8位以內。</p> //C# 版DES 加解密演算法 using Syst

C#des加密解密

length format esp lin div logs fin sin esc using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy

php加密解密

urldecode ech 項目 mode function encrypt 變化 double printf php加密和解密函數通常可以用來加密一些有用的字符串存放在數據庫裏或作為各個子系統間同步登陸的令牌,並且通過解密算法解密字符串,該函數使用了base64和MD5

python進行des加密解密,而且可以與JAVA進行互相加密解密

odi times pla dea details names ideal cati encrypt import binasciifrom pyDes import des, CBC, PAD_PKCS5import uuidimport time# pip instal

php rsa加密解密實例 及簽名驗證-自己實踐

date wql bio eee resource haar ted can open <?php /** * Created by PhpStorm. * User: Administrator * Date: 2018/4/1 *

php aes加密解密類(兼容php5、php7)

bytes pri rip dom ase lee vat idea cipher <?php /** * @desc:php aes加密解密類 * @author [Lee] <[<[email protected]>]> */ class

php7 des加密解密

1.在linux 環境中如果沒有裝encrypt擴充套件 或者php版本大於7.1不支援encrypt加密擴充套件   可以使用openssl加密擴充套件 下面是封裝的加密和解密的方法可直接呼叫   /** * des-ecb加密 * @param str

PHP AES加密解密

<?php namespace app\models; class AES{ public $key; //建構函式,用金鑰初始化 function Prpcrypt( $k ) { $this->key = $k; } /*AES加密*/ public static function e

GO語言DES加密解密

概念理解 DES是以64位元的明文為一個單位來進行加密,並生成64位元的密文。由於它每次只能處理特定長度的一塊資料,所以DES屬於分組密碼演算法。cypto/des包提供了有關des加密的功能。 模式 由於分組密碼演算法只能加密固定長度的分組,所以當加密的明文超過分組密

C++呼叫openssl實現DES加密解密cbc模式 zeropadding填充方式 pkcs5padding填充方式 pkcs7padding填充方式

==============================================     des   cbc  加密 zeropadding填充方式 ============================================== //加密 cbc ze

DES加密解密演算法C語言程式碼實現

程式碼: 1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 /*------------------------ 5 定義列舉型全域性變數 6 -----