我试图对此进行研究,但仍有一些问题没有得到解答.我正在研究如何将8个字符的密码转换为高位加密密钥.在我的研究过程中,我找到了可以谈论盐价值的文章.
假设您可以使用所有256个字符,那么8个字符的密码将是64位长.因此,剩下的64位只是一个盐值.并且,如果我错了,请纠正我,但这样做是为了如果有人试图尝试所有可能的值(蛮力)他们必须尝试所有128位,因为即使盐是未知的.
我的问题确实与这个"盐"值有关:
是否可以在.hpasswd文件中为密码添加盐?我假设没有,因为服务器需要每个用户的盐以验证密码,我不能想到它将如何获得它们,但否则如果要获得列表它将是相当脆弱的.有解决方案吗?
非常感谢你的帮助,本
我试图了解需要在Web应用程序中发送哪些信息.基本上我有一个在Web服务器上运行的Web应用程序,一个数据库,其中包含带有哈希密码和salt的用户表,当然还有启用了javascript的Web客户端.
当用户登录登录时,在客户端输入用户名和密码.我想知道发送了什么信息.Web客户端是否以纯文本形式发送了密码,或者是否使用javascript来散列密码而没有盐并发送了hased结果?或者客户端是否从服务器获取纯文本的盐,然后客户端发送了密码+盐?
哈希和哈希哈希的最佳方法是什么?哈希是否可以将MD5作为哈希?hash(password_plain_text + salt)与hash(hash(password_plain_text)+ salt)有何关系,其中+是字符串连接?
我刚刚阅读了许多关于使用salt散列密码的文章,但是我找不到我所遇到的特定查询/混淆的答案.
假设我刚刚为数据库添加了密码和盐这个方法:
如果这是正确的,当攻击者访问我的数据库时会发生什么?当然,如果他们能够读取散列密码的盐值,他们可以计算出没有盐的散列密码,然后使用彩虹表吗?或者用可逆的东西加密盐值是个好主意?
如果salt值以纯文本形式存储,我就看不到它的重点.请赐教?
鉴于LinkedIn密码漏洞,我一直在考虑密码安全问题.我过去使用的Web开发框架通常将主应用程序级别盐存储为应用程序常量,然后使用该值对所有用户密码进行加密(基于每个应用程序随机生成).例如在伪代码中:password = hash(App::salt + userPassword).
我已经阅读了很多建议,建议为每个用户生成一个随机盐,然后将其与每个用户的密码一起存储在数据库中.我的问题是,这如何提高安全性?如果攻击者从数据库中获取密码摘要列表,他们也可能也能获得盐,对吧?或者是否有一些我不知道的攻击向量会在没有访问表的其余部分的情况下获得密码摘要?
我的问题是:
是不是以明文的形式存储盐就会失去盐的目的(我听说这样做很好)?我的印象是盐是一个额外的变量,为蛮力或字典攻击提供了额外的复杂性,通过导致任何尝试将正确的密码转换为密钥失败,除非提供了正确的盐.在我看来,如果盐已知,攻击者可以使用正确的盐尝试每个密码.如果没有,为什么?
提前感谢您抽出宝贵时间回答我的问题.
我试图模仿Drupal 7在Java中检查正确密码的方式.在这里找到一些代码作为指导:https://github.com/CraftFire/AuthDB-Legacy/blob/master/src/main/java/com/authdb/scripts/cms/Drupal.java并提取我需要的代码.
然而,当我给出密码和散列版本(为了提取所需的盐和迭代量)时,我会得到不同的结果.
密码是使用Drupal密码哈希脚本生成的,结果是:
Expected value = $S$DxVn7wubSRzoK9X2pkGx4njeDRkLEgdqPphc2ZXkkb8Viy8JEGf3
Calculated value = $S$DxVn7wubSpQ1CpUnBZZHNqIXMp2XMVZHMYBqAs24NsUHMY7HBkYn
Expected value = $S$DOASeKfBzZoqgSRl/mBnK06GlLESyMHZ81jyUueEBiCrkkxxArpR
Calculated value = $S$DOASeKfBzs.XMVZ1NkYXNmIqMpEHAoEaMYJ1NmUHCZJaBZFnAZFX
Run Code Online (Sandbox Code Playgroud)
任何人都能帮助我/告诉我这里我做错了什么?谢谢.
码:
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
class test {
public static void main(String args[]) {
// Passwords and hashes generated by Drupal.
checkPassword("test" , "$S$DxVn7wubSRzoK9X2pkGx4njeDRkLEgdqPphc2ZXkkb8Viy8JEGf3");
checkPassword("barbaz", "$S$DOASeKfBzZoqgSRl/mBnK06GlLESyMHZ81jyUueEBiCrkkxxArpR");
}
private static String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static final int DRUPAL_HASH_LENGTH = 55;
private static int password_get_count_log2(String setting) { return itoa64.indexOf(setting.charAt(3)); }
/**
* Note: taken …Run Code Online (Sandbox Code Playgroud) 我有一个简单的注册脚本在PHP完成,我只是好奇,如果我这样做的方式足够安全,以存储用户密码.我正在生成一个32位随机盐并将其附加到sha1哈希密码.
//create new validator object
$validator = new data_validation();
//validate user input
$firstName = $validator->validate_fname($firstName); //is the first name a string?
$lastName = $validator->validate_lname($lastName); // is the last name a string?
$username = $validator->validate_username($username); // is the username a string?
$email = $validator->validate_email($email); //is the email in valid format?
//make sure there isn't duplicate emails
$valQuery = $link->query("SELECT email FROM users WHERE email = '" .$email. "'");
if ($valQuery->num_rows == 1) {
echo "An email is already registered with that …Run Code Online (Sandbox Code Playgroud) 如果我使用salt来解码我的密码,登录总是会返回"Bad credentials".
我正在使用Fixture来创建一些testdata:
public function load(ObjectManager $manager)
{
$encodeFactory = $this->container->get('security.encoder_factory');
$user = new User();
$user->setUsername('admin');
$user->setEmail('webmaster@aranox.de');
$encoder = $encodeFactory->getEncoder($user);
$user->setPassword($encoder->encodePassword('admin', $user->getSalt()));
$user->setIsEnabled(true);
$manager->persist($user);
$manager->flush();
$this->addReference('user-admin', $user);
}
Run Code Online (Sandbox Code Playgroud)
我在security.yml中设置了编码:
security:
encoders:
Aranox\UserBundle\Entity\User:
algorithm: sha512
Run Code Online (Sandbox Code Playgroud)
使用以下方法在我的用户实体中创建salt:
...
/**
* @ORM\Column(type="string", length=255)
*/
private $password;
/**
* @ORM\Column(type="string", length=255)
*/
private $salt;
...
function __construct()
{
$this->groups = new ArrayCollection();
$this->salt = md5(uniqid(null, true));
...
Run Code Online (Sandbox Code Playgroud)
如果不创建盐($ this-> salt =""),一切正常.
怎么会发生这种情况?
如何在C#中创建以下PHP代码?
邮递区号:
<?php
$salt = "salt";
$value = "hello";
$password_hashed = md5($salt.$value);
?>
Run Code Online (Sandbox Code Playgroud)
我将不胜感激。正在测试以下内容:
但这只会返回错误的字符串。
var salt = System.Text.Encoding.UTF8.GetBytes("salt");
var value = System.Text.Encoding.UTF8.GetBytes("hello");
var hmacMD5 = new HMACMD5(salt);
var saltedHash = hmacMD5.ComputeHash(value);
string hex = BitConverter.ToString(saltedHash);
MessageBox.Show(hex.Replace("-", ""));
Run Code Online (Sandbox Code Playgroud)
响应:https : //gyazo.com/340fe77979c1b0b531d07a8050ce66d1
响应应类似于:06decc8b095724f80103712c235586be