Home  >  Article  >  Backend Development  >  PHP, Java des encryption and decryption examples, des encryption and decryption_PHP tutorial

PHP, Java des encryption and decryption examples, des encryption and decryption_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 09:56:05912browse

PHP, Java des encryption and decryption examples, des encryption and decryption

des encryption is a symmetric encryption method that is widely used on the Internet. PHP uses the mcrypt extension library to Supports des encryption. To use des encryption in Php, you need to install the mcrypt extension library

The following is an example of encryption and decryption
Copy code The code is as follows:
$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";//Key
$text = "Meet me at 11 o'clock behind the monument.";//Content that needs to be encrypted
echo ($text) . "n";

$crypttext =base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv));
echo $crypttext . "n";//Encrypted content

echo mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,base64_decode($crypttext),MCRYPT_MODE_ECB,$iv);//Decrypted content

MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_192, and MCRYPT_RIJNDAEL_256 are usually used in the AES encryption algorithm. The following 128, 192, and 256 represent the number of bits of the secret key (that is, the encrypted Key). For example, MCRYPT_RIJNDAEL_128 is used. Then when using this algorithm to encrypt, the secret key length is 128 bits. For example, $key = 'fjjda0&9^$$# *%$fada' is 20 characters. Then only the first 16 characters are used for actual encryption (16 *8=128), will be used in PHP that is less than 128bit

Sometimes when doing project docking, you may be using Php encryption, while the other party is using Java. During the docking process, you will find that the encrypted content cannot be decrypted by the other party. This is because Php and There are differences in the implementation of this algorithm in Java. To correctly encrypt and decrypt, you need to do the following processing on both sides:

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





http://www.bkjia.com/PHPjc/990546.html

www.bkjia.com

true

http: //www.bkjia.com/PHPjc/990546.htmlTechArticlePHP, Java des encryption and decryption examples, des encryption and decryption des encryption is the most commonly used symmetric encryption on the Internet An encryption method. PHP supports des encryption through the mcrypt extension library. It must be in...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn