<?php/**** PHP version 3DES plus decryption class * * Can be compatible with Java 3DES (desede) encryption * * @Author: Lanfeng (ilanfeng.com) * * @version: V0.1 2011.02.18**/ Class cc3des{//encryption only with the replacement key on the line, ECB mode does not need to provide the IV value public $key = "0123456789qweqweewqq1234"; Public $iv = "33889955"; Like Java:private static byte[] Myiv = {50, 51, 52, 53, 54, 55, 56, 57}; Decrypt public Function decrypt ($string) {$td = Mcrypt_module_open (Mcrypt_3des, "", MCRYPT_MODE_ECB, "); Srand (); $iv = Mcrypt_create_iv (Mcrypt_enc_get_iv_size ($TD), Mcrypt_rand); $key = substr ($this->key, 0, Mcrypt_enc_get_key_size ($TD)); Mcrypt_generic_init ($TD, $key, $IV); $value = @pack ("h*", $string); $ret = Trim (Mdecrypt_generic ($TD, $value)); Remove redundant complement $ret = $this->pkcs5_unpad ($ret); Mcrypt_generic_deinit ($TD); Mcrypt_module_close ($TD); return $ret; }//Encrypt public function encrypt ($value) {$td = Mcrypt_module_open (Mcrypt_3des, ', MCRYPT_MODE_ECB, '); Srand (); $iv = Mcrypt_create_iv (Mcrypt_enc_get_iv_size ($TD), Mcrypt_rand); $key = substr ($this->key, 0, Mcrypt_enc_get_key_size ($TD)); Mcrypt_generic_init ($TD, $key, $IV); $value = $this->pkcs5_pad ($value, Mcrypt_get_block_size (mcrypt_3des, ' ECB '); $ret = Mcrypt_generic ($TD, $value); Mcrypt_generic_deinit ($TD); Mcrypt_module_close ($TD); Return Strtoupper (Bin2Hex ($ret)); }/* * Number of digits * * * Private Function Pkcs5_pad ($text, $blocksize) {$pad = $blocksize-(strlen ($text)% $ BLOCKSIZE); Return $text. Str_repeat (Chr ($pad), $pad); }/* * Remove complement */Private function Pkcs5_unpad ($text) {$pad = Ord ($text {strlen ($text)-1}); if ($pad > strlen ($text)) {return false; if (strspn ($text, Chr ($pad), strlen ($text)-$pad)! = $pad) {return false; } return substr ($text, 0,-1 * $pad); }}?>
PHP version 3DES plus decryption class