2012-04-04 50 views
0

我的網站是建立在WordPress的,我們正在收集個人信息,我將需要放置在我的數據庫。這裏是我的php到目前爲止插入:PHP加密與wordpress

//defined in wp-config.php 
$key = KEY_ENCRYPT; 

function encrypt($text) 
{ 
    return trim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND)))); 
} 


if($_POST){ 
    //POST object placed in variables 
    $user_domain = $_POST['domain']; 
    $s_user = $_POST['s-username']; 
    $s_pass = $_POST['s-password']; 
    $w_user = $_POST['w-username']; 
    $w_pass = $_POST['w-password']; 

    //encrypting data 
    $encrypted_server_username = encrypt($s_user); 
    $encrypted_server_password = encrypt($s_pass); 
    $encrypted_wordpress_username = encrypt($w_user); 
    $encrypted_wordpress_password = encrypt($w_pass); 

    //set up array for options table 
    $user_website_data = array(
     'domain'=>$user_domain, 
     'server_username'=>$encrypted_server_username, 
     'server_password'=>$encrypted_server_password, 
     'wordpress_username'=>$encrypted_wordpress_username, 
     'wordpress_password'=>$encrypted_wordpress_password 
     ); 

     update_option($user_domain . '_website_data', $user_website_data); 

此代碼成功地將信息存儲在一個數組中。你甚至可以看到這個代碼的工作和過程在http://thewpvalet.staging.wpengine.com/sign-up/?plan=basic。請使用4242424242424242作爲CC號碼進行測試。

現在我試圖在後端管理區域實現解碼,以便我可以按域進行搜索並獲得憑證。這是我的代碼:

if(isset($_POST['domain'])){ 
     function decrypt($text) 
     { 
      $key = KEY_ENCRYPT; 

      return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($text), MCRYPT_MODE_ECB, mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), MCRYPT_RAND))); 
     } 


     $search_domain = $_POST['domain']; 
     $url_removal = array("http://","www."); 
     $clean_search_domain = str_replace($url_removal, '', $search_domain); 
     $user_options = get_option($search_domain.'_website_data'); 

     echo '<strong>Login Information:</strong></br>' . 
     'Domain:' . $user_options['domain'] . '</br>' . 
     'Server Username:' . decrypt($user_options['server_username']) . '</br>'; 

    } 

這將返回mcrypt_decrypt()[function.mcrypt - 解密]鍵的大小對於此算法/ NAS/WP/WWW /分期/ thewpvalet /可溼性粉劑內容過多/插件/用戶信息/ index.php在線43

任何想法我可能做錯了嗎?

+0

$ key/KEY_ENCRYPT多久? – 2012-04-04 21:24:02

+4

基督,你真的不應該使用WordPress接受信用卡數據。你是否甚至考慮過PCI合規性這個非常繁重的任務?使用像Stripe這樣的服務。 – ceejayoz 2012-04-04 21:26:18

+1

ceejayoz,請原諒我,但如果您要發表評論,請留下問題。我正在使用stripe並使用Stripe.js類爲CC信息發送令牌。這是關於Wordpress憑據和服務器信息,我需要進行遷移。如果你沒有任何好的或有幫助的說不假定,請不要發表評論。 – Enrico 2012-04-04 21:33:53

回答

2

任何想法我在這裏可能會做錯嗎?

是的,你做錯的事是rolling your own cryptography。讓我們添加一些空格,看看你的功能細節:

/** 
* THIS CODE IS INSECURE. DO NOT USE IT. PURGE IT FROM YOUR CODEBASE! 
*/ 
function encrypt($text) 
{ 
    return trim(
     base64_encode(
      mcrypt_encrypt(
       MCRYPT_RIJNDAEL_256, // Non-standard block cipher; not AES 
       $key, 
       $text, 
       MCRYPT_MODE_ECB, // ECB mode is insecure 
       mcrypt_create_iv(// ECB mode doesn't use an IV anyway 
        mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB), 
        MCRYPT_RAND // you want MCRYPT_DEV_URANDOM 
       ) 
      ) 
     ) 
    ); 
} 

你產生IV(不安全的)與ECB模式(反正丟棄IV),對於非標準Rijndael變量,和你」不要使用消息認證。 Encryption without message authentication is a fatal mistake

馬克B,關鍵是長

34個字符如果您使用MCRYPT_RIJNDAEL_256或AES(它是專門MCRYPT_RIJNDAEL_128的方式; mcrypt is considered harmful),這些是唯一可以接受的密鑰大小:

  • 16字節
  • 24字節
  • 32字節

您收到錯誤的原因是34是無效輸入。這可能意味着您使用的是人類可讀的密碼而不是加密密鑰。

TL; DR:不要推出自己的加密,而是使用經過深入研究的實現。 defuse/php-encryptionZend\Crypt是你最好的選擇。