标签: salt

如何最好地为网站生成随机盐?

我想生成一个随机的salt值并将其置于Application状态.

现在,我正在使用Web场,因此每台计算机的应用程序状态将不同.我也不想购买分布式状态农场应用程序.

那么..有什么解决方案呢?我以为我可以在代码或web.config文件中对其进行硬编码..但这意味着eva的相同盐...不是很安全.

有人有什么建议吗?

记住 - 我在所有机器上都使用了一个独特的键(例如guid).也许配置文件是唯一的方法?

salt application-state web-farm

5
推荐指数
1
解决办法
2098
查看次数

关于哈希盐的综合信息

关于盐和最佳实践存在很多问题,但是大多数问题只是回答有关它们的非常具体的问题.我有几个相互提问的问题.

假设数据库被泄露,每用户盐阻止使用通用彩虹表来破解密码.必须为每个拥有唯一盐的用户生成单独的彩虹表以获取其密码.这将是一个耗时的过程,这使得盐有效.这对字典或暴力攻击无济于事.

这导致了许多问题:

  1. 虽然盐并不意味着通过默默无闻的安全性,将盐放入单独的桌子中是不是更安全? 这样,即使"用户"表被破坏,盐也不会.
  2. 拥有第二个硬编码的应用程序广泛的盐会增加大量的安全性吗? 这样,即使数据库受到损害,实际应用程序也必须受到损害,或者盐和散列都将完全无用.
  3. 盐的最佳长度是多少?显然越长越好,但是随着用户数量的增加,数据库大小确实成为一个问题,那么有效盐的最小长度是多少?
  4. 使用第三方来源真正需要"真正的随机盐"(random.org,random.irb.hr)吗? 我理解在某种程度上使用基于服务器时间的盐是"可猜测的",但是随机字符串的随机子字符串似乎是一种有效的盐方法.

先感谢您.

database security random hash salt

5
推荐指数
1
解决办法
761
查看次数

MySQL和php中的独特文本字段

我用盐创造了一种盐; MD5(兰特(0,10000000)); (可能有更好的方法?)

似乎没有可能在MYSQL中使文本字段唯一.那么如何检查盐是否已用于以前的用户?

或者我应该根据当前日期/时间生成盐?因为2个用户不可能在完全相同的时间注册正确吗?

php mysql unique salt

5
推荐指数
1
解决办法
2882
查看次数

完整性检查:盐和哈希密码

我对哈希密码和盐值有所了解.因为我对哈希和加密很新,我想我会把它发给你.为每个用户帐户生成唯一的盐是否更安全,然后在数据库中存储salt和散列值?或者,保持一个盐值安全存储并重新使用每次我输入密码?

例如,用户将使用密码:

"secret"
Run Code Online (Sandbox Code Playgroud)

我的代码会生成一个salt值:

"d1d0e3d4b3d1ed1598a4e77bb614750a2a175e"
Run Code Online (Sandbox Code Playgroud)

然后哈希结果得到:

"e8187dcbe8e2eabd4675f3a345fe21c98affb
 5544a9278461535cb67265b6fe09a11dbef572
 ce3a4a8f2275839927625cf0bc7bc46fc45d51
 12d7c0713bb4a3"
Run Code Online (Sandbox Code Playgroud)

然后,在创建帐户时,散列结果和salt将存储在用户配置文件的数据库中.然后,每次用户登录时,都会生成一个新的盐,密码和盐重新存储并存储在数据库中.

有什么想法吗?就像我说的,这是对我的想法的理智检查.

c# hash salt password-protection

5
推荐指数
2
解决办法
1737
查看次数

这看起来像密码的强盐

这看起来像是一个安全的盐与密码一起使用?任何改进或建议或明显的缺陷?

$salt = '';
for ($i = 0; $i < 50; $i++) {
   $salt .= chr(rand(33, 126));
}
Run Code Online (Sandbox Code Playgroud)

php security hash salt

5
推荐指数
2
解决办法
580
查看次数

使用密码盐的Pure-ftpd和Postgreql Auth

我最近开始设置PureFTP服务器的任务.在工作中我们使用Postgresql 8.4.架构基本上归结为,

username        text
password        character(40)
password_salt   text
Run Code Online (Sandbox Code Playgroud)

password存储为哈希sha1( password + salt ).使用Postgresql的pgcrypto我可以提供一个username,password并找出用户是否有auth:

SELECT
 encode( digest( $password ||password_salt, 'sha1' ), 'hex' ) = password
   AS password_correct
 , username
 , password
 , password_salt
FROM contact.person;
Run Code Online (Sandbox Code Playgroud)

现在我遇到的问题是这样的功能需要我将密码输入查询.Pureftp目前的auth-postgresql实现似乎不太可行.它仅支持提供:

\L is replaced by the login of a user trying to authenticate.
\I is replaced by the IP address the client connected to.
\P is replaced by the port number the client connected to.
\R is replaced …
Run Code Online (Sandbox Code Playgroud)

postgresql salt saltedhash pureftpd

5
推荐指数
1
解决办法
1284
查看次数

Crypt为两个不同(相似)密码返回相同的哈希值

我有一个使用crypt()的问题,如果用户有密码(本例中为password1),并且将其更改为password2,则哈希返回相同的结果.您可以在此处测试:OLD LINK 键入password1作为当前密码,password2作为新密码并确认密码,您将看到结果.如果输入完全不相似的密码,则没有问题.我知道还有其他方法可以使用哈希密码等.我比任何事都更好奇.我的代码如下:

<?php

$oldpassword="password1";

echo "<form method=\"post\">
<p>Enter Current Password: <input type=\"password\" name=\"currentpassword\" /></p>
<p>Enter New Password: <input type=\"password\" name=\"password\" /></p>
<p>Confirm New Password: <input type=\"password\" name=\"confirmpassword\" /></p>
<p><input type=\"submit\" value=\"Change Password\"></p>
</form>";

$user_id = $_SESSION['user_id'];
$pass=$_POST['password'];
$salt = 'xxxxx';
$currentpassword = crypt($_POST['currentpassword'], $salt);
$oldpassword = crypt($oldpassword, $salt);
if(isset($_POST['password'])) {
    if ($currentpassword !== $oldpassword) {
        echo "The password you entered for current password does not match our records.";
    }
    else {
        if ($_POST['password'] && $_POST['confirmpassword']) {
            if ($_POST['password'] …
Run Code Online (Sandbox Code Playgroud)

php hash crypt salt

5
推荐指数
1
解决办法
1517
查看次数

bcrypt和随机生成的盐

所以我正在试验bcrypt.我有一个类(如下所示,我从http://www.firedartstudios.com/articles/read/php-security-how-to-safely-store-your-passwords获得),其中有3个函数.第一个是生成随机Salt,第二个是使用第一个生成的Salt生成哈希,最后一个是通过将其与哈希密码进行比较来验证提供的密码.

<?php
/* Bcrypt Example */
class bcrypt {
    private $rounds;
    public function __construct($rounds = 12) {
        if(CRYPT_BLOWFISH != 1) {
            throw new Exception("Bcrypt is not supported on this server, please see the following to learn more: http://php.net/crypt");
        }
        $this->rounds = $rounds;
    }

    /* Gen Salt */
    public function genSalt() {
        /* openssl_random_pseudo_bytes(16) Fallback */
        $seed = '';
        for($i = 0; $i < 16; $i++) {
            $seed .= chr(mt_rand(0, 255));
        }
        /* GenSalt */
        $salt = substr(strtr(base64_encode($seed), '+', …
Run Code Online (Sandbox Code Playgroud)

php salt bcrypt password-encryption

5
推荐指数
1
解决办法
3256
查看次数

yii CPasswordHelper:hashPassword和verifyPassword

我想我在这里缺少一些关键的东西.在CPasswordHelper::hashPassword函数中我们有行:

$salt=self::generateSalt($cost);  
$hash=crypt($password,$salt);  

return $hash;
Run Code Online (Sandbox Code Playgroud)

CPasswordHelper::verifyPassword这条线上:

$test=crypt($password,$hash);  

return self::same($test, $hash);
Run Code Online (Sandbox Code Playgroud)

盐怎么样?根据我的理解,它甚至没有保留,但它没有任何意义,所以我猜我完全不理解它.

passwords hash salt yii

5
推荐指数
1
解决办法
5945
查看次数

php crypt()河豚盐长度向后兼容

我使用crypt()来哈希密码,像这样的河豚盐:

[a-zA-Z0-9] $ 2a $,2位数,$,21个字符

在这里我犯了一个错误,在第三个$ 21之后的字符长度不是22.但它工作正常所以我没有找到错误.

它适用于运行Windows和PHP 5.4.4的桌面以及使用php 5.3.x运行Amazon linux的AWS ec2,其中包含太短的盐.

有一天,我将AWS php更新为5.5.14.然后问题发生了.crypt()一直返回*0.

经过一番尝试,我在盐的末尾加了一个$,所以它变成22个字符.它再次工作并返回与以前相同的哈希字符串.虽然它不遵守河豚规则,但字符应为[./a-zA-Z0-9]

但是现在我将这个站点复制到另一台运行openSuSE 13.1和php 5.5.14的机器上,这个盐再次失败了.

我将php降级到5.4.20,但没有帮助.

新站点仍然需要旧数据库,所以我必须使密码哈希工作.

什么是影响此河豚盐长度错误兼容性问题的库或模块?Tt似乎不是PHP的版本.AWS 5.5.14

或者是否有另一个神奇的咒语可以再次救我?我尝试在[./a-zA-Z0-9]中为每个替换尾部$但是没有幸运,哈希字符串是不同的....

php blowfish salt

5
推荐指数
1
解决办法
457
查看次数