我在db4free.net上创建了一个db,我想用php连接它:
$username = myusername;
$password = mypw;
$host = "db4free.net:3306";
$dbname = mydbname;
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
try
{
$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options);
}
catch(PDOException $ex)
{
die("Failed to connect to the database: " . $ex->getMessage());
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:无法连接到数据库:SQLSTATE [HY000] [2005]未知的MySQL服务器主机
所以我在想,主机名是错的,所以我试着改变它(添加/ dbname或/ username或删除端口,等等).我已经尝试了所有的组合,但没有一个有效.多次检查登录数据.可能是什么问题呢?
我可以用PHP在PHP中哈希:
$orig_pw = "abcd";
$salt = 5f8f041b75042e56;
$password = hash('sha256', $orig_pw . $salt);
Run Code Online (Sandbox Code Playgroud)
(这不是我实现它的方式,这只是一个例子.盐对每个人都不同)
有了这个,存储的密码是:
bc20a09bc9b3d3e1fecf0ed5742769726c93573d4133dbd91e2d309155fa9929
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试在Java中做同样的事情,我会得到不同的结果.我试过了String password = "abcd";
byte[] salt = hexStringToByteArray("5f8f041b75042e56");
try {
System.out.println(new String(getHash(password, salt)));
} catch (NoSuchAlgorithmException e1) {
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这两种方法:
public byte[] getHash(String password, byte[] salt) throws NoSuchAlgorithmException {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
digest.reset();
digest.update(salt);
try {
return digest.digest(password.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return null;
}
public byte[] hexStringToByteArray(String s) {
int len = s.length();
byte[] data = new …Run Code Online (Sandbox Code Playgroud)