0

PHP を使用して、元の数値にデコードできる別の数値に数値をエンコードしようとしています。エンコードされた文字列は数字のみである必要があり、それ以外のものを含むべきではありません。

例: 10 は 573563547892 などになります。

PHPでこのようなことを行うにはどうすればよいですか? かなりの数の暗号化および復号化機能を試しましたが、数字だけを出力するものはありませんでした。

簡単に推測できない URL で使用できるものを探しています。

したがって、http: //www.me.com/index.PHP?page=20 はhttp://www.me.com/index.PHP?page=5705254782562466になります。

4

2 に答える 2

2

ord&chrを少し使用することにより、非常に重いが非常に優れた暗号化。これは機能しますが、他のオプションを検討してください:数値ではなく文字列を使用できるようにするだけで、はるかに簡単になります (など):base64_encode

<?php
class Crypter {
  private $key = '';
  private $iv = '';
  function __construct($key,$iv){
    $this->key = $key;
    $this->iv  = $iv;
  }
  protected function getCipher(){
     $cipher = mcrypt_module_open(MCRYPT_BLOWFISH,'','cbc','');
     mcrypt_generic_init($cipher, $this->key, $this->iv);
     return $cipher;
  }
  function encrypt($string){
     $binary = mcrypt_generic($this->getCipher(),$string);
     $string = '';
     for($i = 0; $i < strlen($binary); $i++){
        $string .=  str_pad(ord($binary[$i]),3,'0',STR_PAD_LEFT);
     }
     return $string;
  }
  function decrypt($encrypted){
     //check for missing leading 0's
     $encrypted = str_pad($encrypted, ceil(strlen($encrypted) / 3) * 3,'0', STR_PAD_LEFT);
     $binary = '';
     $values = str_split($encrypted,3);
     foreach($values as $chr){
        $chr = ltrim($chr,'0');
        $binary .= chr($chr);
     }
     return mdecrypt_generic($this->getCipher(),$binary);
  }
}

$crypt = new Crypter('secret key','12348765');
$encrypted = $crypt->encrypt(1234);
echo $encrypted.PHP_EOL;
//fake missing leading 0
$encrypted = ltrim($encrypted,'0');
echo $encrypted.PHP_EOL;
$decrypted = $crypt->decrypt($encrypted);
echo $decrypted.PHP_EOL;

結果:

057044206104214236155088
57044206104214236155088
1234
于 2013-09-23T18:34:53.260 に答える