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