- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前正在尝试理解哈希和盐。据我了解,如果我只有密码和生成的哈希值(这是用随机盐生成的),就不可能验证密码。如果我不加盐,PHP 中的password_verify
函数如何验证我的密码?后台是否有一个隐藏变量,为 php 哈希函数存储它?
如果是这样的话,怎么可能
doveadm pw -t '{SHA512-CRYPT}$6$myhash...' -p "qwertz"
也要验证它,即使我在完全不同的计算机上运行它?那是 Dovecot(一种 MDA)附带的工具。
这是我的 PHP 代码,它创建一个包含 64 个字符的随机盐,将其与密码组合,创建哈希并通过 password_verify()
验证哈希。
我今天才开始研究整个hash/salt/pepper
,所以我的整个思路可能存在巨大缺陷。
<?php
$password = "qwertz";
$salt = createSalt(64);
$hash = crypt($password, "$6$$salt");
if (password_verify($password, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}
function createSalt($length){
$chars = "IrhsYyLofUKj4caz0FDBCe2W9NRunTgQvp7qOXmS5GM3EJV6i8tAHdkPbxwl1Z";
$salt="";
for($i=0; $i < $length; $i++){
$newchar = substr($chars, rand(0,strlen($chars)-1),1);
$salt .= $newchar;
}
return $salt;
}
?>
最佳答案
散列包含几条信息。这article解释了 Unix 使用的格式,但我相信 PHP 密码函数使用类似的格式(如果不相同的话):
The hash field itself is comprised of three different fields. They are separated by '$' and represent:
- Some characters which represents the cryptographic hashing mechanism used to generate the actual hash
- A randomly generated salt to safeguard against rainbow table attacks
- The hash which results from joining the users password with the stored salt and running it through the hashing mechanism specified in the first field
它还可以包括用于生成哈希的每个算法的确切选项,例如算法成本:
var_dump(password_hash('foo', PASSWORD_BCRYPT, [
'cost' => 8,
]));
string(60) "$2y$08$7Z5bTz7xXnom8QsrbZ7uQetMLxOZ7WjuDkUYRIh73Ffa17GV1Tb7q"
此处$2y$08$
表示使用了成本为8的Bcrypt。
如果我们使用 PHP/7.2 中可用的更新的 Argon2,则参数会更多:
$argon2i$v=19$m=1024,t=2,p=2$YzJBSzV4TUhkMzc3d3laeg$zqU/1IN0/AogfP4cmSJI1vc8lpXRW9/S0sYY2i2jHT0
关于php - password_verify 和 doveadm pw -t 如何在不加盐的情况下验证密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48232449/
我正在使用 GIT_REPO_URL="https://$GIT_ACCOUNT:$USER_PW@github.com/XXXX/xxx" 语法。 最近我更改了密码以@结尾。 例如我的密码是1234
我有一个简单的应用,允许用户通过 Auth 方法注册到 Firebase。这是我的代码: public class SignUpActivity extends AppCompatActivity {
sprintf(xBuffer,"%l",rootCause) rootCause 是 unsigned long bad_printf_format_string:invalid format st
即使我多次运行该程序,我也只尝试打印一次 pw.println 语句。有什么解决办法吗? public static void main(String[] args) throws IOExcepti
我在网上找到了一些说明,但遇到了错误: 在此之后 - Setting the MySQL root user password on OS X 我跑了 sudo mysqld_safe --skip-
如何在 C++ 中将字符串分配给 char *pw 喜欢... char *pw = 一些字符串 ?? 最佳答案 对于常量初始化,你可以简单地使用 const char *pw = "mypasswo
我陷入了一些烦人的境地。 在我的桌面和生产服务器之间有一个机器链。像这样的东西: desktop -> firewall 1 -> firewall 2 -> prod_box 1
我正在关注位于此处的 MSDN 文章:http://msdn.microsoft.com/en-us/library/aa302398.aspx 我的困惑在于函数: private static st
您好,我对数据库的“用户”和从数据库访问其详细信息的企业“客户”感到困惑。 我正在构建一个网络,客户可以在其中登录并访问他们的银行余额、对账单、直接借记等(银行应用程序)。我的 SQL 数据库将有一个
我有一个将用户添加到 Linux 系统的脚本。我打算有一个步骤将根 pw 设置为默认值,但是如果脚本中没有明文形式的 pw,我该如何做到这一点? 最佳答案 查看联机帮助页中的 usermod 选项“-
我正在编写一个 bash 脚本来自动执行 gpg 解密过程。该脚本将密码作为其参数之一。我需要找到一种方法,当我在脚本中运行gpg解密时,脚本会自动执行输入密码的提示。 最佳答案 我会使用 read
我在 C++ 中做了一个密码验证器程序,它基本上将一个字符串传递作为输入,然后另一个字符串验证以确认它是正确的,最后检查输入的字符串是否正确格式与否。假设字符串的长度大于 6 且小于 20 个字符,则
我目前正在尝试理解哈希和盐。据我了解,如果我只有密码和生成的哈希值(这是用随机盐生成的),就不可能验证密码。如果我不加盐,PHP 中的password_verify 函数如何验证我的密码?后台是否有一
我是 MYSQL 和 JSP 的新手。我正在尝试检查 mysql 数据库和 jsp 之间的连接。当我在服务器上运行该项目时,它抛出异常。我找不到代码上的错误。 我在mysql上创建了oop数据库,UN
我发布了一个 php 文件,我刚刚意识到它包含连接到 mysql 数据库的密码,以 mysqli_connect 的形式。我现在容易受到攻击吗? 最佳答案 是的,立即更改密码。 关于php - 如果我
我和这个人有完全相同的问题:Tomcat 7 Manager - how to authenticate? 我使用的是 Windows,我下载了适用于 Windows 的 Tomcat 7.0.39
我有一个问题,我可以在 node-bcrypt 和passport.js 中创建散列密码,但无法使用散列密码。 我使用 nodejs、express、mongodb、mongoose、passport
我正在努力启动 jupyterhub,以有限的 sudo 权限运行,没有 root 权限。如果我理解正确的话,这使得在共享系统上以真实系统用户身份运行笔记本服务器成为可能,而无需以 root 身份运行
重置root密码后可以毫无问题地连接mysql数据库: C:\\> C:\mysql\bin\mysqld-nt --init-file=C:\\\\mysql-init.txt 其中 mysql-i
所以我有一个连接到 ejabberd 服务器的小 JavaScript/Strophejs xmpp 客户端。到目前为止,我已经在 ejabberd 网络管理员中创建了用户,例如我创建了用户 a@te
我是一名优秀的程序员,十分优秀!