2

原始网址

/category.php?id=28

加密后g

/category.php?id=DyAtftpy3cg4RNtJWT51vFlU5fMVuN+bvaTC365XYkU=

function encryptIt( $q ) {
    $cryptKey  = 'qJB0rGtIn5UB1xG03efyCp';
    $qEncoded      = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
    return $qEncoded;
}

解密

decryptIt($_REQUEST['id']);

使用的功能

function decryptIt( $q ) {
    $cryptKey  = 'qJB0rGtIn5UB1xG03efyCp';
    $qDecoded      = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
    return $qDecoded;
}

但它返回���.�_��JC �\Y|{�[=4�V!�o$��

4

2 回答 2

3
base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ),
    $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );

应该

base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ),
    $var, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );

是什么$q?不应该$var吗?(在encryptIt

为我工作

function decryptIt($data, $key) {
    $key = md5($key);
    $data = base64_decode($data);
    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256,
        $key, $data, MCRYPT_MODE_CBC, md5($key));
    $decrypted = rtrim($decrypted, "\0");
    return $decrypted;
}
function encryptIt($data, $key) {
    $key = md5($key);
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_256,
        $key, $data, MCRYPT_MODE_CBC, md5($key));
    $encrypted = base64_encode($encrypted);
    return $encrypted;
}
// Testing
header('Content-Type: text/plain');
$data = 'testing';
$key = 'qJB0rGtIn5UB1xG03efyCp';
$encrypted = encryptIt($data, $key);
// Added your own data here (IT WORKS)
$encrypted = 'DyAtftpy3cg4RNtJWT51vFlU5fMVuN+bvaTC365XYkU=';
echo 'Encrypted: ', $encrypted, '<br>', PHP_EOL;
$decrypted = decryptIt($encrypted, $key);
echo 'Decrypted: ', $decrypted, '<br>', PHP_EOL;

^不知道你做错了什么,但我做了一件事: 我停止了重叠式指令的疯狂。为每个变量分配变量并使代码清晰,易于遵循并且......功能......我认为:)

PS :有单线很好,但如果你在 1 线中有错误,它会折磨你。

于 2013-07-07T12:05:15.003 回答
1

好吧,我的最后一个帖子被删除了...

我看到它在 cli 上工作,但不是通过 apache。

这是我的解决方案:

decryptit(htmlentities($_GET['i'],ENT_QUOTES | ENT_IGNORE, "UTF-8"));

顺便说一句,我现在使用 php 手册中的代码。

问候

于 2014-09-08T21:00:45.513 回答