使用PHP,我正在尝试将一个数字编码为另一个数字,我可以将其解码回原始数字。编码的字符串只需要是数字,不应包含任何其他内容。
例如:10变为573563547892或类似的东西。
如何在PHP中执行此类操作?我尝试了很多加密解密函数,但没有一个只输出数字。
我在一个不容易猜到的网页中寻找要使用的内容。
所以:http://www.me.com/index.PHP?page=20变为http://www.me.com/index.PHP?page=5705254782562466
答案 0 :(得分:2)
为什么不在原始号码上使用mathematicat操作?例如x
变为x * y + z
。您只需要进行反向操作即可获得原始数字。考虑为y
和/或z
答案 1 :(得分:2)
使用ord
&amp ;,加密相当重,但加密效果非常好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