我想在我的应用程序中实施许可并且需要一些帮助。
示例应用程序具有以下内容:
// REPLACE WITH YOUR OWN SALT , THIS IS FROM EXAMPLE
private static final byte[] SALT = new byte[]{
-46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95, -45, 77, -117, -36, -113, -11, 32, -64,
89
};
Run Code Online (Sandbox Code Playgroud)
我想知道我只是将数字更改为某个随机数还是必须使用它生成它SecureRandom?
我遇到了这个代码,我必须从剪贴板设置 SALT 变量吗?
此外,每个设备的 SALT 必须不同还是相同?
我理解如何编写PHP代码以成功利用BCrypt.所以,我不需要帮助它开始工作.
相反,我需要帮助了解BCrypt如何神奇地工作!
在这个代码中,在第15行,为了验证登录密码是否= =原始(现在是哈希/盐渍)密码,我觉得你只是(a)使用登录创建一个新的哈希值/盐渍值密码和原始(以及现在的散列/盐渍)密码,然后(b)将(a)中创建的值与原始(现在的散列/盐渍)密码进行比较.我不明白这些是如何平等的,但它们是!
例如,假设用户使用密码test进行注册,这可以说(为简单起见)将哈希/盐腌为1234.
一天后,用户尝试登录(使用1234),我们需要对其进行身份验证.为此,我们执行第15行的代码.这意味着我们执行以下操作:
crypt("test", "1234") == "1234"
Run Code Online (Sandbox Code Playgroud)
如何使用新的盐值(在这种情况下为1234)进行散列/盐析测试会导致匹配?
在这一点上,这个问题大多只是我的脑筋急转弯.;)
考虑以下两种方法:
hashedPassword = hash(trulyRandomSalt + password)
Run Code Online (Sandbox Code Playgroud)
其中 hashedPassword 和 trueRandomSalt 存储在数据库中。
hashedPassword = hash(applicationConstantPepper + uniqueUserName + password)
Run Code Online (Sandbox Code Playgroud)
其中 hashedPassword 和 uniqueUserName 存储在数据库中,applicationConstantPepper 存储在应用程序配置中。在这里,uniqueUserName 充当盐,通常是电子邮件地址。
我已经读过这个问题,它有很多重要的信息,但没有解决应用程序恒定胡椒值以及如何使用用户名作为盐来改进。
我一直使用方法一和 32 位加密随机盐。但是,我刚刚看到另一个应用程序中使用了方法二。我对方法二遇到的第一个问题是它将用户名与哈希值联系起来,这样用户名就永远不会在不重新生成哈希值的情况下更改。
方法二有哪些安全问题?哪种方法是最好的使用方法?
好吧,我不知道它到底叫什么,所以我称之为动态盐哈希。最近,我遇到了一种使用动态盐(随机生成)的哈希算法。结果,相同的字符串产生不同的哈希值。我想知道它是如何工作的以及如何验证的。验证函数仅需要 2 个参数:字符串和哈希值。我想知道它是如何工作的。
编辑:
我看到了一个与我类似(但不重复)的问题:https ://crypto.stackexchange.com/questions/1770/salts-how-does-the-script-know-what-the-salt-is
我的问题和那个问题都尚未得到解答。
state.apply 和 state.sls 有什么区别?我什么时候应该使用 state.apply 和 state.sls?
hashcat64.exe hashcat -m0 -a0 crackme.txt password.txt
Run Code Online (Sandbox Code Playgroud)
设备#1:英特尔的 OpenCL 运行时(仅限 GPU)当前已损坏。我们正在等待来自 Intel 的更新 OpenCL 驱动程序
哈希“hashcat”:令牌长度异常未加载哈希。
我收到这条消息。我附上了我的 CL 的快照。我查找了哈希目录及其格式中的任何空格。我还尝试更改 .txt 文件的所有 Unicode 格式。似乎什么都不起作用。我还更新了英特尔驱动程序。\
cryptography salt password-hash cryptographic-hash-function hashcat
想知道每次密码更改时,对于单个给定用户来说盐是否是唯一的,或者每次重复使用相同的盐是不是一件大事.
每当给定用户更新密码时,我当前生成一个新的随机字符串作为salt.这样,每次用户有新密码时,他们也会更换盐.这很容易,为什么不呢.
嗯......这就是原因.我需要存储以前的X密码以确保密码不被重用.在过去(我最后一次为此编写代码),我可以存储以前的MD5哈希值,并将新的哈希值与该列表进行比较.好吧,现在我正在使用盐腌哈希,每次盐都是独特的,那些比较已不再可能,因为以前的盐不再是已知的.
为了使该系统工作,我有两个选择:除最终哈希之外还存储盐的历史记录,或者为每个密码更新的任何一个给定用户重复使用相同的盐.这些中的任何一个都可以让我构建可以与历史进行比较的值.
后者工作量较少,但失去了什么力量?从实际的角度来看,我认为没有.以为我会在这里得到第二个意见.谢谢.
为了保持"回答"这个问题 - 为了保持可搜索的密码历史(为了防止pswd回收),为任何一个用户重复使用相同的盐都会有一个可接受的最小程度的保护减少?
我不知道如何在我的场景中使用"盐概念".
假设我有一个客户端桌面应用程序,它为特定用户加密数据并将其发送到远程服务器.客户端应用程序使用用户密码和SALT生成PKCS#5的密钥.远程桌面绝不能与用户的密码联系.
假设我们为加密生成随机盐.客户端应用程序可以加密数据,并将其发送到远程服务器.如果用户试图在另一台计算机上访问他的数据,那么它将如何解密它,因为盐是未知的?
我认为一直使用相同的盐(在应用程序中硬编码)并不是一个好主意(混淆的安全性很差).
我怎样才能解决我的问题?
我试图用某种安全性将我的密码保存到数据库中.使用play框架执行此操作的最佳方法是什么?我在javascript中加密字符串吗?不会想到这是最好的方式吗?或者发送普通字符串然后在保存到数据库时加密?
我目前正在开展一个学校项目,最近我在完成登录授权方面没有取得任何进展.我正在使用HASH和SALT注册新用户.我找不到任何能让我感到满意的资源,所以我决定在这里开个账户来问我自己的问题.
这是我的注册脚本:
$username = $_POST['username'];
$email = $_POST['email'];
$first = $_POST['fname'];
$last = $_POST['lname'];
$salt = crypt("sha512", false);
$pass = $_POST['password'];
$password = hash("sha512", $salt . $pass . $salt, false);
$sql = "INSERT INTO `users` (`username`, `email`, `fname`, `lname`, `salt`, `password`) VALUES ('$username', '$email', '$first', '$last', '$salt', '$password')";
Run Code Online (Sandbox Code Playgroud)
然后我有一个checklogin.php脚本,它是我的索引页面上的action ="checklogin.php",这是登录页面.这是完整的脚本:http://pastebin.com/tKrsHaFU(粘贴垃圾箱)
我的问题是如何验证我的用户来到index.php页面(登录表单)与数据库中已有的用户请记住我有密码的盐和哈希.
salt ×10
hash ×4
passwords ×3
php ×2
android ×1
android-lvl ×1
bcrypt ×1
cryptographic-hash-function ×1
cryptography ×1
encryption ×1
hashcat ×1
history ×1
login ×1
mysql ×1
pkcs#5 ×1
python ×1
salt-stack ×1
security ×1