本文整理汇总了PHP中Crypt_DES类的典型用法代码示例。如果您正苦于以下问题:PHP Crypt_DES类的具体用法?PHP Crypt_DES怎么用?PHP Crypt_DES使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Crypt_DES类的17个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的PHP代码示例。
示例1: Crypto
public static function Crypto($text, $cipher, $key, $isEncrypt)
{
switch ($cipher) {
case 'DES':
$crypt = new Crypt_DES(CRYPT_DES_MODE_CBC);
$crypt->setKey($key);
$crypt->setIV($key);
if ($isEncrypt) {
return strtoupper(bin2hex($crypt->encrypt($text)));
} else {
return $crypt->decrypt(CryptoUtil::hex2bin($text));
}
break;
case 'AES-256':
$crypt = new Crypt_Rijndael(CRYPT_RIJNDAEL_MODE_ECB);
$crypt->setKey($key);
if ($isEncrypt) {
return strtoupper(bin2hex($crypt->encrypt($text)));
} else {
return $crypt->decrypt(CryptoUtil::hex2bin($text));
}
break;
default:
break;
}
return "ERROR";
}
开发者ID:jemmy655,项目名称:OpenCart-API-service-by-Kancart.com-Mobile,代码行数:27,代码来源:CryptoUtil.php
示例2: idtagDesEncode
public static function idtagDesEncode($key, $text)
{
$crypt_des = new Crypt_DES();
$crypt_des->setKey($key);
$crypt_des->setIV($key);
$encrypted = $crypt_des->encrypt($text);
return base64_encode($encrypted);
}
开发者ID:youngsun45,项目名称:miniyun,代码行数:8,代码来源:MSecret.php
示例3: getKey
function getKey($astrMerchantID, $astrFileName)
{
$fh = fopen($astrFileName, 'r');
$strmodulas = fgets($fh);
$strmodulas = trim($strmodulas);
fclose($fh);
$lMKey = 'MTIzNjU0MTIzOTg3MTIzNA==';
$des = new Crypt_DES(CRYPT_DES_MODE_ECB);
$des->setKey($this->hexstr(base64_decode($lMKey)));
$cleartext = $des->decrypt($this->hexstr($strmodulas));
$hexkey = $this->strhex($cleartext);
$hexkey = strlen($hexkey) <= 40 ? $hexkey : substr($hexkey, 0, 40);
return $hexkey;
}
开发者ID:mydos,项目名称:JBIMS-Admission,代码行数:14,代码来源:EncryptionUtil.php
示例4: parse_result
function parse_result($smsbody)
{
global $post_data;
//var_dump( $post_data);
$post_data["smsbody"] = $smsbody;
//echo $post_data;
$temp_data = json_encode($post_data);
//采用json的方式传递数据
$KEY = 'e55a65-@';
$crypt = new Crypt_DES(CRYPT_DES_MODE_ECB);
$crypt->setKey($KEY);
$temp_data = $crypt->encrypt($temp_data);
// 加密后的数据
$data_md5 = strtolower(md5($temp_data));
$token = md5(substr($data_md5, 0, 16) . "_360mobile_" . substr($data_md5, 16));
//产生token传送,用来接受方检验数据的合法性
$url = 'http://w-sweng2.mobi.zzbc.qihoo.net:8810/parsesms_v2/index.php?token=' . $token;
$result = curl_http($url, $temp_data);
//传递的是加密后的数据
//echo $result;
return $result;
}
开发者ID:disibutatian,项目名称:parsesms,代码行数:22,代码来源:test.php
示例5: _parseKey
/**
* Break a public or private key down into its constituant components
*
* @access private
* @see _convertPublicKey()
* @see _convertPrivateKey()
* @param String $key
* @param Integer $type
* @return Array
*/
function _parseKey($key, $type)
{
if ($type != CRYPT_RSA_PUBLIC_FORMAT_RAW && !is_string($key)) {
return false;
}
switch ($type) {
case CRYPT_RSA_PUBLIC_FORMAT_RAW:
if (!is_array($key)) {
return false;
}
$components = array();
switch (true) {
case isset($key['e']):
$components['publicExponent'] = $key['e']->copy();
break;
case isset($key['exponent']):
$components['publicExponent'] = $key['exponent']->copy();
break;
case isset($key['publicExponent']):
$components['publicExponent'] = $key['publicExponent']->copy();
break;
case isset($key[0]):
$components['publicExponent'] = $key[0]->copy();
}
switch (true) {
case isset($key['n']):
$components['modulus'] = $key['n']->copy();
break;
case isset($key['modulo']):
$components['modulus'] = $key['modulo']->copy();
break;
case isset($key['modulus']):
$components['modulus'] = $key['modulus']->copy();
break;
case isset($key[1]):
$components['modulus'] = $key[1]->copy();
}
return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false;
case CRYPT_RSA_PRIVATE_FORMAT_PKCS1:
case CRYPT_RSA_PUBLIC_FORMAT_PKCS1:
/* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is
"outside the scope" of PKCS#1. PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to
protect private keys, however, that's not what OpenSSL* does. OpenSSL protects private keys by adding
two new "fields" to the key - DEK-Info and Proc-Type. These fields are discussed here:
http://tools.ietf.org/html/rfc1421#section-4.6.1.1
http://tools.ietf.org/html/rfc1421#section-4.6.1.3
DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.
DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation
function. As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's
own implementation. ie. the implementation *is* the standard and any bugs that may exist in that
implementation are part of the standard, as well.
* OpenSSL is the de facto standard. It's utilized by OpenSSH and other projects */
if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {
$iv = pack('H*', trim($matches[2]));
$symkey = pack('H*', md5($this->password . substr($iv, 0, 8)));
// symkey is short for symmetric key
$symkey .= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
$ciphertext = preg_replace('#.+(\\r|\\n|\\r\\n)\\1|[\\r\\n]|-.+-| #s', '', $key);
$ciphertext = preg_match('#^[a-zA-Z\\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false;
if ($ciphertext === false) {
$ciphertext = $key;
}
switch ($matches[1]) {
case 'AES-128-CBC':
if (!class_exists('Crypt_AES')) {
require_once 'Crypt/AES.php';
}
$symkey = substr($symkey, 0, 16);
$crypto = new Crypt_AES();
break;
case 'DES-EDE3-CFB':
if (!class_exists('Crypt_TripleDES')) {
require_once 'Crypt/TripleDES.php';
}
$crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CFB);
break;
case 'DES-EDE3-CBC':
if (!class_exists('Crypt_TripleDES')) {
require_once 'Crypt/TripleDES.php';
}
$crypto = new Crypt_TripleDES();
break;
case 'DES-CBC':
if (!class_exists('Crypt_DES')) {
require_once 'Crypt/DES.php';
}
$crypto = new Crypt_DES();
//.........这里部分代码省略.........
开发者ID:macconsultinggroup,项目名称:WordPress,代码行数:101,代码来源:RSA.php
示例6: _setupInlineCrypt
/**
* Setup the performance-optimized function for de/encrypt()
*
* @see Crypt_Base::_setupInlineCrypt()
* @access private
*/
function _setupInlineCrypt()
{
$lambda_functions =& Crypt_DES::_getLambdaFunctions();
// Engine configuration for:
// - DES ($des_rounds == 1) or
// - 3DES ($des_rounds == 3)
$des_rounds = $this->des_rounds;
// We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
// After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one
$gen_hi_opt_code = (bool) (count($lambda_functions) < 10);
// Generation of a uniqe hash for our generated code
switch (true) {
case $gen_hi_opt_code:
// For hi-optimized code, we create for each combination of
// $mode, $des_rounds and $this->key its own encrypt/decrypt function.
$code_hash = md5(str_pad("Crypt_DES, {$des_rounds}, {$this->mode}, ", 32, "") . $this->key);
break;
default:
// After max 10 hi-optimized functions, we create generic
// (still very fast.. but not ultra) functions for each $mode/$des_rounds
// Currently 2 * 5 generic functions will be then max. possible.
$code_hash = "Crypt_DES, {$des_rounds}, {$this->mode}";
}
// Is there a re-usable $lambda_functions in there? If not, we have to create it.
if (!isset($lambda_functions[$code_hash])) {
// Init code for both, encrypt and decrypt.
$init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
if (!$sbox1) {
$sbox1 = array_map("intval", $self->sbox1);
$sbox2 = array_map("intval", $self->sbox2);
$sbox3 = array_map("intval", $self->sbox3);
$sbox4 = array_map("intval", $self->sbox4);
$sbox5 = array_map("intval", $self->sbox5);
$sbox6 = array_map("intval", $self->sbox6);
$sbox7 = array_map("intval", $self->sbox7);
$sbox8 = array_map("intval", $self->sbox8);' . '
for ($i = 0; $i < 256; ++$i) {
$shuffleip[] = $self->shuffle[$self->ipmap[$i]];
$shuffleinvip[] = $self->shuffle[$self->invipmap[$i]];
}
}
';
switch (true) {
case $gen_hi_opt_code:
// In Hi-optimized code mode, we use our [3]DES key schedule as hardcoded integers.
// No futher initialisation of the $keys schedule is necessary.
// That is the extra performance boost.
$k = array(CRYPT_DES_ENCRYPT => $this->keys[CRYPT_DES_ENCRYPT], CRYPT_DES_DECRYPT => $this->keys[CRYPT_DES_DECRYPT]);
$init_encrypt = '';
$init_decrypt = '';
break;
default:
// In generic optimized code mode, we have to use, as the best compromise [currently],
// our key schedule as $ke/$kd arrays. (with hardcoded indexes...)
$k = array(CRYPT_DES_ENCRYPT => array(), CRYPT_DES_DECRYPT => array());
for ($i = 0, $c = count($this->keys[CRYPT_DES_ENCRYPT]); $i < $c; ++$i) {
$k[CRYPT_DES_ENCRYPT][$i] = '$ke[' . $i . ']';
$k[CRYPT_DES_DECRYPT][$i] = '$kd[' . $i . ']';
}
$init_encrypt = '$ke = $self->keys[CRYPT_DES_ENCRYPT];';
$init_decrypt = '$kd = $self->keys[CRYPT_DES_DECRYPT];';
break;
}
// Creating code for en- and decryption.
$crypt_block = array();
foreach (array(CRYPT_DES_ENCRYPT, CRYPT_DES_DECRYPT) as $c) {
/* Do the initial IP permutation. */
$crypt_block[$c] = '
$in = unpack("N*", $in);
$l = $in[1];
$r = $in[2];
$in = unpack("N*",
($shuffleip[ $r & 0xFF] & "\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80") |
($shuffleip[($r >> 8) & 0xFF] & "\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40") |
($shuffleip[($r >> 16) & 0xFF] & "\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20") |
($shuffleip[($r >> 24) & 0xFF] & "\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10") |
($shuffleip[ $l & 0xFF] & "\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08") |
($shuffleip[($l >> 8) & 0xFF] & "\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04") |
($shuffleip[($l >> 16) & 0xFF] & "\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02") |
($shuffleip[($l >> 24) & 0xFF] & "\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01")
);
' . '
$l = $in[1];
$r = $in[2];
';
$l = '$l';
$r = '$r';
// Perform DES or 3DES.
for ($ki = -1, $des_round = 0; $des_round < $des_rounds; ++$des_round) {
// Perform the 16 steps.
for ($i = 0; $i < 16; ++$i) {
// start of "the Feistel (F) function" - see the following URL:
// http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
// Merge key schedule.
//.........这里部分代码省略.........
开发者ID:sawh,项目名称:ostepu-system,代码行数:101,代码来源:DES.php
示例7: inline_crypt_setup
function inline_crypt_setup($des_rounds = 1)
{
$lambda_functions =& Crypt_DES::get_lambda_functions();
$block_size = 8;
$mode = $this->mode;
$code_hash = "$mode,$des_rounds";
if (!isset($lambda_functions[$code_hash])) {
$ki = -1;
$init_cryptBlock = '
$shuffle = $self->shuffle;
$invipmap = $self->invipmap;
$ipmap = $self->ipmap;
$sbox1 = $self->sbox1;
$sbox2 = $self->sbox2;
$sbox3 = $self->sbox3;
$sbox4 = $self->sbox4;
$sbox5 = $self->sbox5;
$sbox6 = $self->sbox6;
$sbox7 = $self->sbox7;
$sbox8 = $self->sbox8;
';
$_cryptBlock = '$in = unpack("N*", $in);'."\n";
$_cryptBlock .= '
$l = $in[1];
$r = $in[2];
$in = unpack("N*",
($shuffle[$ipmap[ $r & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
($shuffle[$ipmap[($r >> 8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
($shuffle[$ipmap[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
($shuffle[$ipmap[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
($shuffle[$ipmap[ $l & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
($shuffle[$ipmap[($l >> 8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
($shuffle[$ipmap[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
($shuffle[$ipmap[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x01")
);
'.'' .'
$l = $in[1];
$r = $in[2];
';
$l = 'l';
$r = 'r';
for ($des_round = 0; $des_round < $des_rounds; ++$des_round) {
for ($i = 0; $i < 8; ++$i) {
$_cryptBlock .= '
$b1 = (($' . $r . ' >> 3) & 0x1FFFFFFF) ^ ($' . $r . ' << 29) ^ $k_'.(++$ki).';
$b2 = (($' . $r . ' >> 31) & 0x00000001) ^ ($' . $r . ' << 1) ^ $k_'.(++$ki).';
$' . $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
$sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
$sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^
$sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ $' . $l . ';
$b1 = (($' . $l . ' >> 3) & 0x1FFFFFFF) ^ ($' . $l . ' << 29) ^ $k_'.(++$ki).';
$b2 = (($' . $l . ' >> 31) & 0x00000001) ^ ($' . $l . ' << 1) ^ $k_'.(++$ki).';
$' . $r . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
$sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
$sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^
$sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ $' . $r . ';
';
}
$t = $l;
$l = $r;
$r = $t;
}
$_cryptBlock .= '$in = (
($shuffle[$invipmap[($' . $r . ' >> 24) & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
($shuffle[$invipmap[($' . $l . ' >> 24) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
($shuffle[$invipmap[($' . $r . ' >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
($shuffle[$invipmap[($' . $l . ' >> 16) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
($shuffle[$invipmap[($' . $r . ' >> 8) & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
($shuffle[$invipmap[($' . $l . ' >> 8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
($shuffle[$invipmap[ $' . $r . ' & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
($shuffle[$invipmap[ $' . $l . ' & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x01")
);
';
switch ($mode) {
case CRYPT_DES_MODE_ECB:
$encrypt = $init_cryptBlock . '
extract($self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, "k");
$ciphertext = "";
$plaintext_len = strlen($text);
for ($i = 0; $i < $plaintext_len; $i+= '.$block_size.') {
$in = substr($text, $i, '.$block_size.');
'.$_cryptBlock.'
$ciphertext.= $in;
}
return $ciphertext;
';
$decrypt = $init_cryptBlock . '
extract($self->keys[CRYPT_DES_DECRYPT_1DIM], EXTR_PREFIX_ALL, "k");
//.........这里部分代码省略.........
开发者ID:pf5512,项目名称:phpstudy,代码行数:101,代码来源:Crypt_DES.php
示例8: des
/**
* Инициализирует класс для шифровки данных через DES.
*
* @return Crypt_DES
*/
public static function des()
{
$des = new Crypt_DES();
$des->setKey(self::PIN_CODE);
return $des;
}
开发者ID:kapai69,项目名称:fl-ru-damp,代码行数:11,代码来源:wallet.php
示例9: inline_crypt_setup
/**
* Creates performance-optimized function for de/encrypt(), storing it in $this->inline_crypt
*
* @param optional Integer $des_rounds (1 = DES[default], 3 = TribleDES)
* @access private
*/
function inline_crypt_setup($des_rounds = 1)
{
$lambda_functions =& Crypt_DES::get_lambda_functions();
$block_size = 8;
$mode = $this->mode;
$code_hash = "{$mode},{$des_rounds}";
if (!isset($lambda_functions[$code_hash])) {
// Generating encrypt code:
$ki = -1;
$init_cryptBlock = '
$shuffle = $self->shuffle;
$invipmap = $self->invipmap;
$ipmap = $self->ipmap;
$sbox1 = $self->sbox1;
$sbox2 = $self->sbox2;
$sbox3 = $self->sbox3;
$sbox4 = $self->sbox4;
$sbox5 = $self->sbox5;
$sbox6 = $self->sbox6;
$sbox7 = $self->sbox7;
$sbox8 = $self->sbox8;
';
$_cryptBlock = '$in = unpack("N*", $in);' . "\n";
// Do the initial IP permutation.
$_cryptBlock .= '
$l = $in[1];
$r = $in[2];
$in = unpack("N*",
($shuffle[$ipmap[ $r & 0xFF]] & "\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80") |
($shuffle[$ipmap[($r >> 8) & 0xFF]] & "\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40") |
($shuffle[$ipmap[($r >> 16) & 0xFF]] & "\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20") |
($shuffle[$ipmap[($r >> 24) & 0xFF]] & "\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10") |
($shuffle[$ipmap[ $l & 0xFF]] & "\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08") |
($shuffle[$ipmap[($l >> 8) & 0xFF]] & "\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04") |
($shuffle[$ipmap[($l >> 16) & 0xFF]] & "\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02") |
($shuffle[$ipmap[($l >> 24) & 0xFF]] & "\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01")
);
' . '' . '
$l = $in[1];
$r = $in[2];
';
$l = 'l';
$r = 'r';
for ($des_round = 0; $des_round < $des_rounds; ++$des_round) {
// Perform the 16 steps.
// start of "the Feistel (F) function" - see the following URL:
// http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
// Merge key schedule.
for ($i = 0; $i < 8; ++$i) {
$_cryptBlock .= '
$b1 = (($' . $r . ' >> 3) & 0x1FFFFFFF) ^ ($' . $r . ' << 29) ^ $k_' . ++$ki . ';
$b2 = (($' . $r . ' >> 31) & 0x00000001) ^ ($' . $r . ' << 1) ^ $k_' . ++$ki . ';
$' . $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
$sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
$sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^
$sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ $' . $l . ';
$b1 = (($' . $l . ' >> 3) & 0x1FFFFFFF) ^ ($' . $l . ' << 29) ^ $k_' . ++$ki . ';
$b2 = (($' . $l . ' >> 31) & 0x00000001) ^ ($' . $l . ' << 1) ^ $k_' . ++$ki . ';
$' . $r . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
$sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
$sbox5[($b1 >> 8) & 0x3F] ^ $sbox6[($b2 >> 8) & 0x3F] ^
$sbox7[ $b1 & 0x3F] ^ $sbox8[ $b2 & 0x3F] ^ $' . $r . ';
';
}
// Last step should not permute L & R.
$t = $l;
$l = $r;
$r = $t;
}
// Perform the inverse IP permutation.
$_cryptBlock .= '$in = (
($shuffle[$invipmap[($' . $r . ' >> 24) & 0xFF]] & "\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80") |
($shuffle[$invipmap[($' . $l . ' >> 24) & 0xFF]] & "\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40") |
($shuffle[$invipmap[($' . $r . ' >> 16) & 0xFF]] & "\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20") |
($shuffle[$invipmap[($' . $l . ' >> 16) & 0xFF]] & "\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10") |
($shuffle[$invipmap[($' . $r . ' >> 8) & 0xFF]] & "\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08") |
($shuffle[$invipmap[($' . $l . ' >> 8) & 0xFF]] & "\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04") |
($shuffle[$invipmap[ $' . $r . ' & 0xFF]] & "\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02") |
($shuffle[$invipmap[ $' . $l . ' & 0xFF]] & "\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01")
);
';
// Generating mode of operation code:
switch ($mode) {
case CRYPT_DES_MODE_ECB:
$encrypt = $init_cryptBlock . '
extract($self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, "k");
$ciphertext = "";
$plaintext_len = strlen($text);
for ($i = 0; $i < $plaintext_len; $i+= ' . $block_size . ') {
$in = substr($text, $i, ' . $block_size . ');
' . $_cryptBlock . '
//.........这里部分代码省略.........
开发者ID:sspaeti,项目名称:ImpressPages,代码行数:101,代码来源:DES.php
示例10: inline_crypt_setup
public function inline_crypt_setup($des_rounds)
{
$lambda_functions =& Crypt_DES::get_lambda_functions();
$block_size = 8;
$mode = $this->mode;
$code_hash = "{$mode},{$des_rounds}";
if (!$lambda_functions[$code_hash]) {
$ki = -1;
$init_cryptBlock = "\n \$shuffle = \$self->shuffle;\n \$invipmap = \$self->invipmap;\n \$ipmap = \$self->ipmap;\n \$sbox1 = \$self->sbox1;\n \$sbox2 = \$self->sbox2;\n \$sbox3 = \$self->sbox3;\n \$sbox4 = \$self->sbox4;\n \$sbox5 = \$self->sbox5;\n \$sbox6 = \$self->sbox6;\n \$sbox7 = \$self->sbox7;\n \$sbox8 = \$self->sbox8;\n ";
$_cryptBlock = "\$in = unpack(\"N*\", \$in);\n";
$_cryptBlock .= "\n \$l = \$in[1];\n \$r = \$in[2];\n \$in = unpack(\"N*\",\n (\$shuffle[\$ipmap[ \$r & 0xFF]] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\") |\n (\$shuffle[\$ipmap[(\$r >> 8) & 0xFF]] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") |\n (\$shuffle[\$ipmap[(\$r >> 16) & 0xFF]] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\") |\n (\$shuffle[\$ipmap[(\$r >> 24) & 0xFF]] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\") |\n (\$shuffle[\$ipmap[ \$l & 0xFF]] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\") |\n (\$shuffle[\$ipmap[(\$l >> 8) & 0xFF]] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04\") |\n (\$shuffle[\$ipmap[(\$l >> 16) & 0xFF]] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\") |\n (\$shuffle[\$ipmap[(\$l >> 24) & 0xFF]] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\")\n );\n\n \n \$l = \$in[1];\n \$r = \$in[2];\n ";
$l = "l";
$r = "r";
for ($des_round = 0; $des_round < $des_rounds; ++$des_round) {
for ($i = 0; $i < 8; ++$i) {
$_cryptBlock .= "\n \$b1 = ((\$" . $r . " >> 3) & 0x1FFFFFFF) ^ (\$" . $r . " << 29) ^ \$k_" . ++$ki . ";\n \$b2 = ((\$" . $r . " >> 31) & 0x00000001) ^ (\$" . $r . " << 1) ^ \$k_" . ++$ki . ";\n \$" . $l . " = \$sbox1[(\$b1 >> 24) & 0x3F] ^ \$sbox2[(\$b2 >> 24) & 0x3F] ^\n \$sbox3[(\$b1 >> 16) & 0x3F] ^ \$sbox4[(\$b2 >> 16) & 0x3F] ^\n \$sbox5[(\$b1 >> 8) & 0x3F] ^ \$sbox6[(\$b2 >> 8) & 0x3F] ^\n \$sbox7[ \$b1 & 0x3F] ^ \$sbox8[ \$b2 & 0x3F] ^ \$" . $l . ";\n\n \$b1 = ((\$" . $l . " >> 3) & 0x1FFFFFFF) ^ (\$" . $l . " << 29) ^ \$k_" . ++$ki . ";\n \$b2 = ((\$" . $l . " >> 31) & 0x00000001) ^ (\$" . $l . " << 1) ^ \$k_" . ++$ki . ";\n \$" . $r . " = \$sbox1[(\$b1 >> 24) & 0x3F] ^ \$sbox2[(\$b2 >> 24) & 0x3F] ^\n \$sbox3[(\$b1 >> 16) & 0x3F] ^ \$sbox4[(\$b2 >> 16) & 0x3F] ^\n \$sbox5[(\$b1 >> 8) & 0x3F] ^ \$sbox6[(\$b2 >> 8) & 0x3F] ^\n \$sbox7[ \$b1 & 0x3F] ^ \$sbox8[ \$b2 & 0x3F] ^ \$" . $r . ";\n ";
}
$t = $l;
$l = $r;
$r = $t;
}
$_cryptBlock .= "\$in = (\n (\$shuffle[\$invipmap[(\$" . $r . " >> 24) & 0xFF]] & \"\\x80\\x80\\x80\\x80\\x80\\x80\\x80\\x80\") |\n (\$shuffle[\$invipmap[(\$" . $l . " >> 24) & 0xFF]] & \"\\x40\\x40\\x40\\x40\\x40\\x40\\x40\\x40\") |\n (\$shuffle[\$invipmap[(\$" . $r . " >> 16) & 0xFF]] & \"\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\") |\n (\$shuffle[\$invipmap[(\$" . $l . " >> 16) & 0xFF]] & \"\\x10\\x10\\x10\\x10\\x10\\x10\\x10\\x10\") |\n (\$shuffle[\$invipmap[(\$" . $r . " >> 8) & 0xFF]] & \"\\x08\\x08\\x08\\x08\\x08\\x08\\x08\\x08\") |\n (\$shuffle[\$invipmap[(\$" . $l . " >> 8) & 0xFF]] & \"\\x04\\x04\\x04\\x04\\x04\\x04\\x04\\x04\") |\n (\$shuffle[\$invipmap[ \$" . $r . " & 0xFF]] & \"\\x02\\x02\\x02\\x02\\x02\\x02\\x02\\x02\") |\n (\$shuffle[\$invipmap[ \$" . $l . " & 0xFF]] & \"\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\")\n );\n ";
switch ($mode) {
case CRYPT_DES_MODE_ECB:
$encrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$ciphertext = \"\";\n \$plaintext_len = strlen(\$text);\n\n for (\$i = 0; \$i < \$plaintext_len; \$i+= " . $block_size . ") {\n \$in = substr(\$text, \$i, " . $block_size . ");\n " . $_cryptBlock . "\n \$ciphertext.= \$in;\n }\n \n return \$ciphertext;\n ";
$decrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_DECRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$plaintext = \"\";\n \$ciphertext_len = strlen(\$text);\n\n for (\$i = 0; \$i < \$ciphertext_len; \$i+= " . $block_size . ") {\n \$in = substr(\$text, \$i, " . $block_size . ");\n " . $_cryptBlock . "\n \$plaintext.= \$in;\n }\n\n return \$self->_unpad(\$plaintext);\n ";
break;
case CRYPT_DES_MODE_CBC:
$encrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$ciphertext = \"\";\n \$plaintext_len = strlen(\$text);\n\n \$in = \$self->encryptIV;\n\n for (\$i = 0; \$i < \$plaintext_len; \$i+= " . $block_size . ") {\n \$in = substr(\$text, \$i, " . $block_size . ") ^ \$in;\n " . $_cryptBlock . "\n \$ciphertext.= \$in;\n }\n\n if (\$self->continuousBuffer) {\n \$self->encryptIV = \$in;\n }\n\n return \$ciphertext;\n ";
$decrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_DECRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$plaintext = \"\";\n \$ciphertext_len = strlen(\$text);\n\n \$iv = \$self->decryptIV;\n\n for (\$i = 0; \$i < \$ciphertext_len; \$i+= " . $block_size . ") {\n \$in = \$block = substr(\$text, \$i, " . $block_size . ");\n " . $_cryptBlock . "\n \$plaintext.= \$in ^ \$iv;\n \$iv = \$block;\n }\n\n if (\$self->continuousBuffer) {\n \$self->decryptIV = \$iv;\n }\n\n return \$self->_unpad(\$plaintext);\n ";
break;
case CRYPT_DES_MODE_CTR:
$encrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$ciphertext = \"\";\n \$plaintext_len = strlen(\$text);\n \$xor = \$self->encryptIV;\n \$buffer = &\$self->enbuffer;\n\n if (strlen(\$buffer[\"encrypted\"])) {\n for (\$i = 0; \$i < \$plaintext_len; \$i+= " . $block_size . ") {\n \$block = substr(\$text, \$i, " . $block_size . ");\n if (strlen(\$block) > strlen(\$buffer[\"encrypted\"])) {\n \$in = \$self->_generate_xor(\$xor);\n " . $_cryptBlock . "\n \$buffer[\"encrypted\"].= \$in;\n }\n \$key = \$self->_string_shift(\$buffer[\"encrypted\"]);\n \$ciphertext.= \$block ^ \$key;\n }\n } else {\n for (\$i = 0; \$i < \$plaintext_len; \$i+= " . $block_size . ") {\n \$block = substr(\$text, \$i, " . $block_size . ");\n \$in = \$self->_generate_xor(\$xor);\n " . $_cryptBlock . "\n \$key = \$in;\n \$ciphertext.= \$block ^ \$key;\n }\n }\n if (\$self->continuousBuffer) {\n \$self->encryptIV = \$xor;\n if (\$start = \$plaintext_len % " . $block_size . ") {\n \$buffer[\"encrypted\"] = substr(\$key, \$start) . \$buffer[\"encrypted\"];\n }\n }\n\n return \$ciphertext;\n ";
$decrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$plaintext = \"\";\n \$ciphertext_len = strlen(\$text);\n \$xor = \$self->decryptIV;\n \$buffer = &\$self->debuffer;\n\n if (strlen(\$buffer[\"ciphertext\"])) {\n for (\$i = 0; \$i < \$ciphertext_len; \$i+= " . $block_size . ") {\n \$block = substr(\$text, \$i, " . $block_size . ");\n if (strlen(\$block) > strlen(\$buffer[\"ciphertext\"])) {\n \$in = \$self->_generate_xor(\$xor);\n " . $_cryptBlock . "\n \$buffer[\"ciphertext\"].= \$in;\n }\n \$key = \$self->_string_shift(\$buffer[\"ciphertext\"]);\n \$plaintext.= \$block ^ \$key;\n }\n } else {\n for (\$i = 0; \$i < \$ciphertext_len; \$i+= " . $block_size . ") {\n \$block = substr(\$text, \$i, " . $block_size . ");\n \$in = \$self->_generate_xor(\$xor);\n " . $_cryptBlock . "\n \$key = \$in;\n \$plaintext.= \$block ^ \$key;\n }\n }\n if (\$self->continuousBuffer) {\n \$self->decryptIV = \$xor;\n if (\$start = \$ciphertext_len % " . $block_size . ") {\n \$buffer[\"ciphertext\"] = substr(\$key, \$start) . \$buffer[\"ciphertext\"];\n }\n }\n \n return \$plaintext;\n ";
break;
case CRYPT_DES_MODE_CFB:
$encrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$ciphertext = \"\";\n \$buffer = &\$self->enbuffer;\n\n if (\$self->continuousBuffer) {\n \$iv = &\$self->encryptIV;\n \$pos = &\$buffer[\"pos\"];\n } else {\n \$iv = \$self->encryptIV;\n \$pos = 0;\n }\n \$len = strlen(\$text);\n \$i = 0;\n if (\$pos) {\n \$orig_pos = \$pos;\n \$max = " . $block_size . " - \$pos;\n if (\$len >= \$max) {\n \$i = \$max;\n \$len-= \$max;\n \$pos = 0;\n } else {\n \$i = \$len;\n \$pos+= \$len;\n \$len = 0;\n }\n \$ciphertext = substr(\$iv, \$orig_pos) ^ \$text;\n \$iv = substr_replace(\$iv, \$ciphertext, \$orig_pos, \$i);\n }\n while (\$len >= " . $block_size . ") {\n \$in = \$iv;\n " . $_cryptBlock . ";\n \$iv = \$in ^ substr(\$text, \$i, " . $block_size . ");\n \$ciphertext.= \$iv;\n \$len-= " . $block_size . ";\n \$i+= " . $block_size . ";\n }\n if (\$len) {\n \$in = \$iv;\n " . $_cryptBlock . "\n \$iv = \$in;\n \$block = \$iv ^ substr(\$text, \$i);\n \$iv = substr_replace(\$iv, \$block, 0, \$len);\n \$ciphertext.= \$block;\n \$pos = \$len;\n }\n return \$ciphertext;\n ";
$decrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$plaintext = \"\";\n \$buffer = &\$self->debuffer;\n\n if (\$self->continuousBuffer) {\n \$iv = &\$self->decryptIV;\n \$pos = &\$buffer[\"pos\"];\n } else {\n \$iv = \$self->decryptIV;\n \$pos = 0;\n }\n \$len = strlen(\$text);\n \$i = 0;\n if (\$pos) {\n \$orig_pos = \$pos;\n \$max = " . $block_size . " - \$pos;\n if (\$len >= \$max) {\n \$i = \$max;\n \$len-= \$max;\n \$pos = 0;\n } else {\n \$i = \$len;\n \$pos+= \$len;\n \$len = 0;\n }\n \$plaintext = substr(\$iv, \$orig_pos) ^ \$text;\n \$iv = substr_replace(\$iv, substr(\$text, 0, \$i), \$orig_pos, \$i);\n }\n while (\$len >= " . $block_size . ") {\n \$in = \$iv;\n " . $_cryptBlock . "\n \$iv = \$in;\n \$cb = substr(\$text, \$i, " . $block_size . ");\n \$plaintext.= \$iv ^ \$cb;\n \$iv = \$cb;\n \$len-= " . $block_size . ";\n \$i+= " . $block_size . ";\n }\n if (\$len) {\n \$in = \$iv;\n " . $_cryptBlock . "\n \$iv = \$in;\n \$plaintext.= \$iv ^ substr(\$text, \$i);\n \$iv = substr_replace(\$iv, substr(\$text, \$i), 0, \$len);\n \$pos = \$len;\n }\n\n return \$plaintext;\n ";
break;
case CRYPT_DES_MODE_OFB:
$encrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$ciphertext = \"\";\n \$plaintext_len = strlen(\$text);\n \$xor = \$self->encryptIV;\n \$buffer = &\$self->enbuffer;\n\n if (strlen(\$buffer[\"xor\"])) {\n for (\$i = 0; \$i < \$plaintext_len; \$i+= " . $block_size . ") {\n \$block = substr(\$text, \$i, " . $block_size . ");\n if (strlen(\$block) > strlen(\$buffer[\"xor\"])) {\n \$in = \$xor;\n " . $_cryptBlock . "\n \$xor = \$in;\n \$buffer[\"xor\"].= \$xor;\n }\n \$key = \$self->_string_shift(\$buffer[\"xor\"]);\n \$ciphertext.= \$block ^ \$key;\n }\n } else {\n for (\$i = 0; \$i < \$plaintext_len; \$i+= " . $block_size . ") {\n \$in = \$xor;\n " . $_cryptBlock . "\n \$xor = \$in;\n \$ciphertext.= substr(\$text, \$i, " . $block_size . ") ^ \$xor;\n }\n \$key = \$xor;\n }\n if (\$self->continuousBuffer) {\n \$self->encryptIV = \$xor;\n if (\$start = \$plaintext_len % " . $block_size . ") {\n \$buffer[\"xor\"] = substr(\$key, \$start) . \$buffer[\"xor\"];\n }\n }\n return \$ciphertext;\n ";
$decrypt = $init_cryptBlock . "\n extract(\$self->keys[CRYPT_DES_ENCRYPT_1DIM], EXTR_PREFIX_ALL, \"k\");\n \$plaintext = \"\";\n \$ciphertext_len = strlen(\$text);\n \$xor = \$self->decryptIV;\n \$buffer = &\$self->debuffer;\n\n if (strlen(\$buffer[\"xor\"])) {\n for (\$i = 0; \$i < \$ciphertext_len; \$i+= " . $block_size . ") {\n \$block = substr(\$text, \$i, " . $block_size . ");\n if (strlen(\$block) > strlen(\$buffer[\"xor\"])) {\n \$in = \$xor;\n " . $_cryptBlock . "\n \$xor = \$in;\n \$buffer[\"xor\"].= \$xor;\n }\n \$key = \$self->_string_shift(\$buffer[\"xor\"]);\n \$plaintext.= \$block ^ \$key;\n }\n } else {\n for (\$i = 0; \$i < \$ciphertext_len; \$i+= " . $block_size . ") {\n \$in = \$xor;\n " . $_cryptBlock . "\n \$xor = \$in;\n \$plaintext.= substr(\$text, \$i, " . $block_size . ") ^ \$xor;\n }\n \$key = \$xor;\n }\n if (\$self->continuousBuffer) {\n \$self->decryptIV = \$xor;\n if (\$start = \$ciphertext_len % " . $block_size . ") {\n \$buffer[\"xor\"] = substr(\$key, \$start) . \$buffer[\"xor\"];\n }\n }\n return \$plaintext;\n ";
break;
}
$lambda_functions[$code_hash] = create_function("\$action, &\$self, \$text", "if (\$action == \"encrypt\") { " . $encrypt . " } else { " . $decrypt . " }");
}
$this->inline_crypt = $lambda_functions[$code_hash];
}
开发者ID:belerweb,项目名称:pigcms,代码行数:48, |
请发表评论