我一直在阅读bcrypt(应用程序视角).考虑使用它来存储我的网站上的密码.
在我阅读的一些内容中,它提出了两种方式:
- 例如1:Bcrypt是来自bcrypt的跨平台文件加密实用程序
- 例如2:bcrypt是一种自适应密码散列算法,它使用Blowfish密钥调度,而不是对称加密算法.从如何安全存储密码
- bcrypt是由Niels Provos和DavidMazières设计的密码自适应加密哈希函数,基于Blowfish密码:来自bcrypt wiki
究竟什么是Bcrypt?
我正在使用带有Spring安全性的BCryptPasswordEncoder.但问题是它为同一输入生成不同的编码密码.
String password = "123456";
PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String encodedPassword = passwordEncoder.encode(password);
System.out.print(encodedPassword);
Run Code Online (Sandbox Code Playgroud)
每次产生不同的输出.
我们在Jboss服务器6.1中运行了三个Web应用程序(标准的Spring MVC-Hibernate).所有这三个应用程序共享一个通用的身份验证方法,该方法被编译为JAR并包含在每个WAR文件中.我们的身份验证方法使用org.springframework.security.crypto.bcrypt.BCrypt来哈希用户密码,请参阅以下内容:
hashedPassword.equals(BCrypt.hashpw(plainTextPassword, salt));
Run Code Online (Sandbox Code Playgroud)
JBOSS启动选项
set "JAVA_OPTS=-Xms2048m -Xmx4096m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -verbosegc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gc.txt -XX:+UseParallelOldGC
问题: 当服务器重新启动时,Bcrypt.hashpw需要100ms来解密密码.然而,经过一段时间(没有模式),Bcrypt.hashpw性能突然从100毫秒上升到10秒.这没有明显的原因.
更多信息:
有没有其他人见过这个问题?
我已经尝试了几天在我的Windows机器上安装bcrypt而没有运气.其中一个依赖项(Windows 7 SDK)不希望安装,即使我已尝试过网络上的许多建议,它只是拒绝合作.
我需要一个很好的替代bcrypt,它没有任何依赖.
我打算在新的Web应用程序中使用jBCrypt进行密码散列,因为它应该是我读过的最好的.因为我在调查之前没有使用它,是否有任何理由不使用它.
我有这个:
我需要了解这个功能的基础知识.对于blowfish算法,php.net文档指出:
Blowfish用盐进行散列如下:"$ 2a $",两位数的成本参数"$",以及字母"./0-9A-Za-z"中的22位64位数字.在salt中使用此范围之外的字符将导致crypt()返回零长度字符串
因此,根据定义,这不应该起作用:
echo crypt('rasmuslerdorf', '$2a$07$usesomadasdsadsadsadasdasdasdsadesillystringforsalt$');
Run Code Online (Sandbox Code Playgroud)
然而,它吐出:
$2a$07$usesomadasdsadsadsadaeMTUHlZEItvtV00u0.kb7qhDlC0Kou9e
Run Code Online (Sandbox Code Playgroud)
看来crypt()已将盐本身切成22的长度.有人可以解释一下吗?
我无法理解这个功能的另一个方面是当他们使用crypt()来比较密码时.http://php.net/manual/en/function.crypt.php(见前#1).这是否意味着如果我使用相同的盐来加密所有密码,我必须首先加密它?即:
$salt = "usesomadasdsadsadsadae";
$salt_crypt = crypt($salt);
if (crypt($user_input, $salt) == $password) {
// FAIL WONT WORK
}
if (crypt($user_input, $salt_crypt) == $password) {
// I HAVE TO DO THIS?
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间
我知道PHP 5.5是alpha版本,但我正在制作的这个类只是通过使用function_exists()来提前使用它的散列特性.
我查看了password_hash文档.第三个参数是$ options,它目前支持两个选项,'salt'和'cost'.
它陈述如下:
cost,表示应该使用的算法成本.可以在crypt()页面上找到这些值的示例.
当我进入crypt()页面时,它提供的文档是:
Blowfish使用盐进行散列如下:"$ 2a $","$ 2x $"或"$ 2y $",两位数的成本参数"$"和字母表中的22位数字"./0-9A-Za -z".在salt中使用此范围之外的字符将导致crypt()返回零长度字符串.两位数的成本参数是底层基于Blowfish的散列算法的迭代计数的基数2对数,并且必须在04-31范围内,超出此范围的值将导致crypt()失败.5.3.7之前的PHP版本仅支持"$ 2a $"作为salt前缀:PHP 5.3.7引入了新的前缀来修复Blowfish实现中的安全漏洞.有关安全修复程序的完整详细信息,请参阅»此文档,但总而言之,仅针对PHP 5.3.7及更高版本的开发人员应使用"$ 2y $"优先于"$ 2a $".
我似乎无法把头包裹起来.它说PHP 5.3.7及更高版本应该使用$ 2y $,但是我用什么成本来获得那个并且它是最好的选择值?他们提供的示例使用的值为7,但根据上述情况,它可以达到31,使用说4与31相比有什么不同?
我正在使用crypt()PHP中的密码哈希,并且我正在尝试在执行密码检查时找出最安全的方法来测试生成的哈希的相等性.
我可以看到三个选项:
选项1 - 双等于
function checkPassword($hash, $password)
{
return crypt($password, $hash) == $hash;
}
Run Code Online (Sandbox Code Playgroud)
选项2 - 三等于
function checkPassword($hash, $password)
{
return crypt($password, $hash) === $hash;
}
Run Code Online (Sandbox Code Playgroud)
备选案文3 - strcmp()
function checkPassword($hash, $password)
{
return strcmp(crypt($password, $hash), $hash) === 0;
}
Run Code Online (Sandbox Code Playgroud)
我的直觉告诉我,由于缺乏类型检查,选项1是一个坏主意,选项2或3可能更好.但是,如果有特定情况===或者strcmp会失败,我就无法解决.哪个是最安全的?
问题是同一个标题,BCrypt使用$ 2x $?
以下情况是对的吗?
$2a$当服务器PHP版本更早时,我们有一组已经使用前缀进行哈希处理的密码5.3.7.现在我们将PHP升级到5.3.7+,现在我们必须先用$2x$算法验证以前的密码然后用$2y$前缀重新密码.那就对了?
我不确定这应该是stackoverflow还是serverfault问题.
我安装了Meteor的帐户密码模块,它在本地工作,但在部署到服务器时破坏了我的应用程序.这是独家新闻:
我在OSX上本地运行最新的Meteor 1.0.5(操作系统刚刚完全更新)使用--architecture构建os.linux.x86_64部署到Ubuntu 14.04.2 LTS x86_64(刚刚更新)运行nodejs v0.12.1(刚建成)使用nginx v1.4.0提供应用程序
仍然得到:
/home/secrethistory/bundle/programs/server/node_modules/fibers/future.js:245
throw(ex);
^
Error: Module did not self-register.
at Error (native)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at bindings (/home/secrethistory/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/node_modules/bindings/bindings.js:74:15)
at Object.<anonymous> (/home/secrethistory/bundle/programs/server/npm/npm-bcrypt/node_modules/bcrypt/bcrypt.js:3:35)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
Run Code Online (Sandbox Code Playgroud)
下一步的任何提示或地点?
bcrypt ×10
php ×4
crypt ×3
java ×3
encryption ×2
hash ×2
node.js ×2
security ×2
blowfish ×1
cryptography ×1
jbcrypt ×1
meteor ×1
nginx ×1
passwords ×1
performance ×1
spring ×1
spring-mvc ×1
string ×1
ubuntu ×1