2012-04-04 54 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是你最好的选择。