2

我有以下数据库

`database`
id | domain        | db_user | db_pass | db_name
------------------------------------------------------
1  | domainone.com | root    | root    | domain_one

// MORE DATABASES HERE

当我访问时domainone.com,我选择 domainone.com 的数据库信息并连接到新数据库。

问题是,我如何“保护”当前处于原始模式的密码?

更新

我想知道如何在数据库中存储让您访问其他数据库的密码。因此,据我所知,我无法散列和验证散列。

4

4 回答 4

3

将您的结构更改为:

`database`
id | domain        | db_user | db_pass | pass_iv | db_name
------------------------------------------------------
1  | domainone.com | root    | root    | ....... | domain_one

// MORE DATABASES HERE

附加列pass_iv将保存用于加密该特定密码的IV 。

这是一些示例 PHP 代码,它以比使用 MySQL 的AES_ENCRYPT函数更安全的方式进行加密和解密。

<?php

$mysqlPass = '12345thispassword$'; // this is the password you want to store

$key    = 'this is a secure secret key...';  // a secure secret key for encryption
$cipher = MCRYPT_RIJNDAEL_256;
$mode   = MCRYPT_MODE_CBC;

$keysize = mcrypt_get_key_size($cipher, $mode);
$ivsize  = mcrypt_get_iv_size($cipher, $mode);
$iv      = mcrypt_create_iv($ivsize);  // create random IV for encryption

$encrypted = mcrypt_encrypt($cipher, $key, $mysqlPass, $mode, $iv); // encrypt pass

此时,将密码与用于加密密码的密码$encrypted一起插入到数据库中(插入到列中)。$ivpass_iv

解密:

$key    = 'this is a secure secret key...';  // a secure secret key for encryption
$cipher = MCRYPT_RIJNDAEL_256;
$mode   = MCRYPT_MODE_CBC;
$keysize = mcrypt_get_key_size($cipher, $mode);

// read password info from db...this includes the encrypted pass and pass_iv

// put encrypted password into $encrypted, put pass_iv into $iv

$decrypted = mcrypt_decrypt($cipher, $key, $encrypted, $mode, $iv);
$decrypted = rtrim($decrypted, "\0");

// decrypted is now the plain-text database password.

希望有帮助。

于 2012-12-03T19:03:42.850 回答
-1

您应该在将其保存到数据库之前应用散列算法。

要检查密码,只需应用相同的算法并根据存储在数据库中的哈希值检查哈希值。

确保你选择了一个好的算法和盐值!

于 2012-12-03T18:35:55.203 回答
-1

您可以使用 md5 加密您的密码并保存在数据库中。当您检查密码时,将输入的密码加密并与数据库中的密码进行比较。

于 2012-12-03T18:39:51.247 回答
-1

这是密码哈希在 MySQL 中如何工作的解释 - http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html

于 2012-12-03T18:40:59.183 回答