Home  >  Article  >  Java  >  Analysis of encryption and decryption examples of PHP and Java des

Analysis of encryption and decryption examples of PHP and Java des

WBOY
WBOYforward
2023-04-29 09:40:201263browse

des encryption is an encryption method that is widely used on the Internet in symmetric encryption. PHP supports des encryption through the mcrypt extension library. To use des encryption in Php, you need to install the mcrypt extension library first.

The following is an example of encryption and decryption

Copy the code code 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";//Encryption The content after
echo mcrypt_decrypt(MCRYPT_RIJNDAEL_256,$key,base64_decode($crypttext),MCRYPT_MODE_ECB,$iv);//The content after decryption

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

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 there are differences between Php and Java when implementing this algorithm, correct encryption and decryption require the following processing on both sides:

PHP:

Copy the code The code is as follows:

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); ($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]);
;
#$key = "1234567891234567";
$data = "example";
$value = Security::encrypt($data, $key);
echo $value.'
';
echo Security::decrypt($value, $key);

Java:


Copy the code code as follows:

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

The above is the detailed content of Analysis of encryption and decryption examples of PHP and Java des. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete