标签: crypt

为什么crypt()函数没有内存泄漏?

来自crypt(3) - Linux手册页:

char *crypt(const char *key, const char *salt);
Run Code Online (Sandbox Code Playgroud)

返回值:返回指向加密密码的指针.出错,NULL返回.

由于除非给出key和salt,否则返回值是未知的,这应该是动态分配的内存,但valgrind不同意.

c crypt

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

在Zend Server CE 5.5中使用sha256的PHP crypt()会截断提供的salt

在从Zend Server CE 5.1升级到Zend Server CE 5.5期间,PHP也从5.3.5升级到5.3.8.在此转换之后,我正在处理的zend应用程序的登录功能突然中断.

试图调试它,看起来好像执行crypt()不反映PHP手册,或者我误解了它.如果我冒险猜测,那就是后者.

我使用一个16字符长的盐作为较大盐的一部分使用SHA256,它在PHP手册中用作示例.

$password = //string entered at login
$salt = '$5$rounds=250000$1234abcd5678defg$';
Run Code Online (Sandbox Code Playgroud)

在我输入密码后输入密码

$hash = crypt($password, $salt);
Run Code Online (Sandbox Code Playgroud)

我得到一个像这样的字符串作为返回值:

$5$rounds=250000$1234abcd5678$tI.Oiz.YwWjIwT3K.SLU8SwUZ9J0/odBCkbE6t0igeB
Run Code Online (Sandbox Code Playgroud)

令我感到困惑的是16字符盐,它是较大部分的一部分(上面的1234abcd5678defg),现在被截断为12个字符.

这是按预期的吗?该crypt()函数现在似乎比以前返回不同的结果 - 通常是PHP版本之间的?更改日志中没有任何内容表明加密算法有任何根本性的变化.

php crypt sha256 zend-server-ce

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

Crypt和Salt如何比MD5对蛮力攻击更安全?

我在PHP.net上看到MD5没用,他们建议使用crypt + salt.

所以,我去了他们的功能描述并阅读

<?php
$password = crypt('mypassword'); // let the salt be automatically generated

/* You should pass the entire results of crypt() as the salt for comparing a
   password, to avoid problems when different hashing algorithms are used. (As
   it says above, standard DES-based password hashing uses a 2-character salt,
   but MD5-based hashing uses 12.) */
if (crypt($user_input, $password) == $password) {
   echo "Password verified!";
}
?>
Run Code Online (Sandbox Code Playgroud)

或者在我的情况下:

$stored_password=fetch_password($user);
if (crypt($_REQUEST['password'],$stored_password)===$stored_password) {
// ok
}
Run Code Online (Sandbox Code Playgroud)

因此,当我看到salt存储在散列密码中并且您使用散列密码作为salt时,我认为Crypt + Salt对于输出上的暴力(黑客成功窃取哈希密码)并不安全.它更安全吗? …

php md5 crypt

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

如何使用河豚自动生成用于crypt方法的盐

我刚开始学习PHP,我想创建一个登录我最后一年大学项目的网站.我已经读过,在这样的很多地方,河豚是最好的散列方法:openssl_digest vs hash vs hash_hmac?SALT和HMAC之间的区别?

我读到的关于crypt方法的每个地方都包含一个字符串,比如$2y$07$usesomesillystringforsalt$我的主要问题是:我如何随机生成这个?我已经读过时间戳和mt_rand()不安全的地方.

我也听说AES是最近的首选技术,但从我看来,在PHP中实现它似乎相当棘手!河豚仍然是保护存储密码的可接受方法吗?

php passwords crypt blowfish

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

什么是Go相当于Python的crypt.crypt?

我目前正在玩一本名为Violent Python的例子.你可以在这里看到我的实现

我现在正在尝试在Go中实现相同的脚本以比较性能,请注意我对Go来说是全新的.打开文件并遍历这些行很好,但是我无法弄清楚如何使用"加密"库以与Python的crypt.crypt(str_to_hash,salt)相同的方式对字符串进行散列.我觉得它可能就像

import "crypto/des"
des.NewCipher([]byte("abcdefgh"))
Run Code Online (Sandbox Code Playgroud)

但是,没有雪茄.任何帮助都会非常感激,因为将Go的并行性能与Python的多线程性能进行比较会非常有趣.

编辑: crypt.crypt的Python文档

python crypt des go

5
推荐指数
0
解决办法
1170
查看次数

PHP crypt()Blowfish功能不起作用

这是我第一次在PHP中使用crypt()函数,我无法弄清楚它为什么不起作用.我的代码基于这篇文章:http://www.techrepublic.com/blog/australia/securing-passwords-with-blowfish/1274

function blowfishHash ($pw) {
   //generate random salt
   $salt = "$2y$10$";
   for ($i = 0; $i < 22; $i++) {
       $salt .= substr("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", mt_rand(0, 63), 1);
   }
  $hash = crypt($pw, $salt);

  //printout to file
  $file = fopen("debug.txt", "w+");
  fwrite($file, "\n\n\n".$pw);
  fwrite($file, "\n\n\n".$salt);
  fwrite($file, "\n\n\n".$hash);
  fclose($file);

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

我使用示例密码"password"调用了该函数.

由此产生的盐是:$2y$10$NzRQNjTRfP4jXKvb4TCO.G
但密码是"$2mV0NZp92R3g"- 这似乎太短了.

有人可以帮我弄清楚我做错了什么吗?

php crypt blowfish bcrypt

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

在PHP中正确使用带有SHA512的crypt()

在线的所有示例都显示了如下所示的crypt的使用:

$pass = crypt('something','$6$rounds=5000$anexamplestringforsalt$');
Run Code Online (Sandbox Code Playgroud)

但是每个人都说你不应该定义轮次或盐.

那我该怎么用呢?

另外我遇到了一个问题:当我运行上面的代码时,它只运行50轮而不是5000轮,就像系统停止它一样.

任何帮助将不胜感激.

// - 解决方案 - //

我发现其中一些有用:

用于生成盐:

 $salt = substr(str_shuffle("./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz012345??6789"), 0, 8); 
Run Code Online (Sandbox Code Playgroud)

要么

如果你有一个linux服务器,这是一种更随机的生成盐的方法

$fp = fopen('/dev/urandom', 'r');
$randomString = fread($fp, 32);
fclose($fp);
Run Code Online (Sandbox Code Playgroud)

Base 64编码以确保某些字符不会导致crypt出现问题

$salt = base64_encode($randomString);
Run Code Online (Sandbox Code Playgroud)

对于哈希:

$hashed = crypt($passwordInput, '$6$'.$salt);
Run Code Online (Sandbox Code Playgroud)

确认:

if (crypt($passwordInput, $hashed) == $hashed) { 
  // Valid action
} else { 
  // Invalid action
}
Run Code Online (Sandbox Code Playgroud)

**特别感谢@ lathspell帮助我们解决上述问题**

php crypt password-encryption

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

使用Talend Data Integration对.properties文件中的密码进行密码/加密和解密

一种建议的运行作业的方法是在属性文件中保存上下文参数.像这个:

#
#Wed Dec 16 18:23:03 CET 2015 
MySQL_AdditionalParams=noDatetimeStringSync\=true 
MySQL_Port=3306   
MySQL_Login=root 
MySQL_Password=secret_password_to_cipher 
MySQL_Database=talend MySQL_Server=localhost
Run Code Online (Sandbox Code Playgroud)

这非常简单实用,但问题在于密码保存清晰.

所以我正在寻找方法来轻松加密.以下是关于密码加密技术的Stack溢出中已经讨论过的两个非常有趣的问题:

但它们是Java原生的,我正在寻找更好的Talend集成.我已经在我的Talend工作中尝试了不同的方法:

所有这些技术都在一个教程(法语,抱歉)中描述,解释了如何在Talend中加密密码

但是遇到了另一个问题:用于加密/解密的密钥总是很清楚,所以如果你知道解决这一问题的好方法,我会很乐意进行实验.

encryption crypt password-encryption talend

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

盐渍密码哈希,不保存盐

我有一个邮件服务器,它使用以下sql在mysql数据库中存储邮箱的密码:

ENCRYPT([PASSWORT], concat(_utf8"$1$", right(md5(rand()), 8), _utf8"$"))
Run Code Online (Sandbox Code Playgroud)

但是数据库中没有存储盐.

现在我需要围绕这个数据库建立一个登录过程,但由于缺少盐,很难比较存储的密码.我注意到,密码哈希以下列形式保存了salt:

$1$[SALT]$[PASSWORD-HASH]
Run Code Online (Sandbox Code Playgroud)

如何创建可比较的密码哈希来构建登录?

Dovecot能够使用存储的密码登录用户,但如何?

mysql crypt dovecot

4
推荐指数
1
解决办法
1868
查看次数

在Windows中使用crypt模块?

在IDLE和Python版本3.3.2中,我尝试调用python模块,如下所示:

hash2 = crypt(word, salt)
Run Code Online (Sandbox Code Playgroud)

我在我的程序顶部导入它,如下所示:

from crypt import *
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

Traceback (most recent call last):
  File "C:\none\of\your\business\adams.py", line 10, in <module>
    from crypt import *
  File "C:\Python33\lib\crypt.py", line 3, in <module>
    import _crypt
ImportError: No module named '_crypt'
Run Code Online (Sandbox Code Playgroud)

但是,当我adams.py在Ubuntu中使用Python 2.7.3 执行相同的文件时,它执行完美 - 没有错误.

我尝试了以下解决Windows和Python 3.3.2的问题(虽然我确定操作系统不是问题,Python版本或我使用的语法是问题):

  1. 将目录中的Python33目录重命名Liblib
  2. 重命名crypt.pylib_crypt.py.然而,事实证明整个crypt.py模块依赖于一个外部模块_crypt.py.
  3. 浏览互联网以下载任何适合类似的东西 _crypt.py

它不是Python,对吗?这是我...(?)我正在使用语法导入和使用2.7.3中可接受但不在3.3.2中的外部模块.或者我在3.3.2中发现了一个错误?

python windows crypt python-2.7 python-3.3

4
推荐指数
2
解决办法
2万
查看次数