簡體   English   中英

PHP用wordpress加密

[英]PHP encryption with wordpress

我的網站建立於 Wordpress,我們正在收集我需要放入我的數據庫中的個人信息。 到目前為止,這是我的 php 用於插入:

//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作為抄送號碼進行測試。

現在我正在嘗試在后端管理區域實現解碼,以便我可以按域搜索並提取憑據。 這是我的代碼:

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-decrypt]: Size of key is too large for this algorithm in /nas/wp/www/staging/thewpvalet/wp-content/plugins/user-info/index.php on line 43

知道我在這里做錯了什么嗎?

知道我在這里做錯了什么嗎?

是的,你做錯的事情是滾動你自己的密碼學 讓我們添加一些空格並詳細查看您的 function:

/**
 * 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
                )
            )
        )
    ); 
}

您正在使用 ECB 模式(無論如何都會丟棄 IV)為非標准 Rijndael 變體生成 IV(不安全),並且您沒有使用消息身份驗證。 沒有消息認證的加密是一個致命的錯誤

Marc B,密鑰長度為 34 個字符

如果您使用的是MCRYPT_RIJNDAEL_256或 AES(順便說一下,它專門是MCRYPT_RIJNDAEL_128mcrypt 被認為是有害的),這些是唯一可接受的密鑰大小:

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM