2017-10-12 157 views
-2

我有這樣的代碼PHP加密空字符串

define('CRYPTKEY','rx4/YK51nJo7LuRnZAz/jpXZbCunkNplneL6ugkBs5g='); 
define('CRYPTALGO','aes-256-cbc'); 

public function crypt($text){ 
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc')); 
$encryption_key = base64_decode(CRYPTKEY); 
$cryptedid = openssl_encrypt ($newid,CRYPTALGO,$encryption_key,0,$iv); 
return base64_encode($cryptedid.'::'.$iv); 
} 

public function decrypt($text){ 
    $encryption_key = base64_decode(CRYPTKEY); 
    list($encrypted_data, $iv) = explode('::', base64_decode($text), 2); 
    return openssl_decrypt($encrypted_data,CRYPTALGO,$encryption_key,0,$iv); 
    } 

CRYPTKEY創建這樣的:

base64_encode(openssl_random_pseudo_bytes(32)); 

,但我一直有一個空字符串作爲解碼文本....

有人可以幫我弄清楚爲什麼?

+0

你爲什麼不直接寫明文作爲純文本?這種不安全加密的目的是什麼? –

+0

@AnttiHaapala我傳遞了加密的id來混淆數據庫中添加敏感數據的行的id。 如果您無法訪問服務器,請通過向我發送腳本來破解此算法,與我分享此腳本的「不安全」。 – Juanse

回答

2

您沒有在crypt()功能中的任何位置使用$text。因此你加密了一個空的('不存在的')字符串。

您必須將$newid(在crypt())更改爲$text才能使其正常工作。像這樣:

$cryptedid = openssl_encrypt($text,CRYPTALGO,$encryption_key,0,$iv); 
//       ^^^^^ 
+0

我花了這麼一天的時間,這很簡單。非常感謝你 – Juanse

+0

好消息是,我花了另一半時間在PHP中找到一個好的算法,所以也許有人會發現這篇文章有用一天 – Juanse

+8

冒着粗魯的風險,如果這麼簡單的事情是打破你的代碼,你可能不想設計你自己的密碼學。 [爲什麼開發者經常被告知不要設計他們自己的密碼學](http://www.cryptofails.com/post/75204435608/write-crypto-code-dont-publish-it)。查看[defuse/php-encryption](https://github.com/defuse/php-encryption)來獲得安全的插入庫來代替。 –