[英]encrypt mysql data and pass through hyperlink, then decrypt on the next page?
[英]Encrypt string when passing it through url as hyperlink and decrypt to echo out on next page?
我正在使用以下加密和解密腳本,以便當用戶單擊包含我的字符串的鏈接時,該鏈接將在url中加密並在下一頁解密。
我的字符串正在被加密找到,但是由於某種原因,它不會在下一頁解密。 有人可以告訴我我要去哪里了嗎? 謝謝,
encryption.php:
<?php class encryption{
private $config;
public function __construct( $options=array() ){
$this->config=array_merge(
array(
'cipher' => MCRYPT_RIJNDAEL_256,
'mode' => MCRYPT_MODE_ECB,
'key' => FALSE,
'iv' => FALSE,
'size' => FALSE,
'base64' => TRUE,
'salt' => FALSE
),
$options
);
}
private function getivs( $config=object ){
$config->size=mcrypt_get_iv_size( $config->cipher, $config->mode );
$config->iv=mcrypt_create_iv( $config->size, MCRYPT_RAND );
}
public function encrypt( $data=NULL ){
$config=(object)$this->config;
$this->getivs( $config );
$data=trim( $data );
$module = mcrypt_module_open( $config->cipher, '', $config->mode, '' );
mcrypt_generic_init( $module, $config->key, $config->iv );
$output = $config->base64 ? base64_encode( mcrypt_generic( $module, $data ) ) : mcrypt_generic( $module, $data );
mcrypt_generic_deinit( $module );
mcrypt_module_close( $module );
return $output;
}
public function decrypt( $data=NULL ){
$config=(object)$this->config;
$this->getivs( $config );
mb_detect_order( 'auto' );
$encoding=mb_detect_encoding( $data );
if( !$data or is_null( $data ) or empty( $data ) or !$encoding or $data=='' or base64_decode( $data )=='' ) return FALSE;
$module = mcrypt_module_open( $config->cipher, '', $config->mode, '' );
mcrypt_generic_init( $module, $config->key, $config->iv );
$output = $config->base64 ? rtrim( mdecrypt_generic( $module, base64_decode( $data ) ),"\0" ) : rtrim( mdecrypt_generic( $module, $data ),"\0" );
mcrypt_generic_deinit( $module );
mcrypt_module_close( $module );
return urldecode( $output );
}
}//end class
?>
new_supplier_listings.php:
session_start();
require_once 'dependables/encryption.php';
$string = 'NS12345';
$enc=new encryption( array( 'key'=>'PlowFish' ) );
$encrypted_string = $enc->encrypt( $string );
echo '<a href="ns_application.php?ns_request='.$encrypted_string.'">Click Here</a>';
ns_application.php:
require_once 'dependables/encryption.php';
$reference = isset($_GET['ns_request']) ? $_GET['ns_request'] : null;
$enc=new encryption( array( 'key'=>'PlowFish' ) );
$encrypted_string = $enc->encrypt( $reference );
echo $encrypted_string;
$decrypted_string=$enc->decrypt( $encrypted_string );
echo $decrypted_string;
問題是您已經向ns_application.php
發送了一個加密值。 再一次,您首先對其進行re-encrypt
,然后嘗試對其進行decrypt
,這就是為什么它沒有給您想要的結果。 嘗試這個:
ns_application.php
:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
require_once 'encryption.php';
$reference = isset($_GET['ns_request']) ? $_GET['ns_request'] : null;
$enc=new encryption( array( 'key'=>'PlowFish' ) );
$decrypted_string=$enc->decrypt( $reference );
echo $decrypted_string;
?>
輸出: NS12345
。
注意:-盡管您的代碼很好,但是最好的做法是添加error reporting code
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.