我想使用Blowfish哈希来哈希密码.
crypt() 在5.3之前的PHP版本中不支持它
我的PHP版本是5.2.14.我怎样才能使用Blowfish哈希?我可以使用PEAR Crypt_Blowfish吗?
我正在使用Python的crypt包来保存Django网站的MySQL数据库中的加密密码.我不确定这是不是一个bug,但这是我正在使用的代码:
要加密/保留密码:
user.password = crypt(request.POST['password'], netid)
user.save()
Run Code Online (Sandbox Code Playgroud)
要在登录时检查密码是否正确:
if crypt(password, email) == user.password:
# Grant acccess to the user's profile, etc.
Run Code Online (Sandbox Code Playgroud)
问题如下.如果我有可变密码进行加密netid = test@example.com和request.POST['password'] = 'ABC123abc',它工作正常.但是,当我尝试登录时,如果我使用密码'ABC123abc[trailing_chars]',其中trailing_chars可以是任何有效的字符串,我仍然可以登录.为什么会这样?它本身就是一个很大的安全漏洞.
我只是在弄乱我是否可以使用'crypt'模块而且我似乎遇到了一个我无法解决的问题.运行之后的输出是这样的:
Password Not Found. secret HXXxJi0n6Huro HXXxJi0n6Huro
Run Code Online (Sandbox Code Playgroud)
这意味着cryptWord和cryptPass是相同的,所以为什么程序不执行(if cryptWord == cryptPass:),和print 'Found Password:
我根本没有得到它.
dictionary.txt文件中只有多个单词secret,都在不同的行上.而且evil.txt文件有这一行:
test_user:HXXxJi0n6Huro
Run Code Online (Sandbox Code Playgroud)
据我所知,一切正常吗?但有些东西正在从正常工作中恢复过来,我无法弄明白.任何帮助,将不胜感激.
import crypt
def testPass(cryptPass):
salt = cryptPass[0:2]
dictFile = open('dictionary.txt', 'r')
for word in dictFile.readlines():
word = word.strip('\n')
cryptWord = crypt.crypt(word, salt)
if cryptWord == cryptPass:
print "[+] Found Password: "+word+"\n"
return
print "[-] Password Not Found. " +word, cryptWord, cryptPass+ "\n"
return
def main():
passFile= open('evil.txt')
for line in passFile.readlines():
if ":" in line:
user = line.split(':')[0]
cryptPass = …Run Code Online (Sandbox Code Playgroud) 我用bcrypt哈希我的密码(因为我运行php 5.3.10 实际上是用password_compat)
我想把函数的结果字符串分成两部分:使用的盐和哈希本身.(我知道使用password_verify()来验证密码.但是我需要使用哈希作为密钥来加密更广泛的安全系统中的私钥.)
对于给定的密码(abcdef),这是结果:
$2y$10$ult68Ti4/zEWX4VQ .... YCOWjL6
Run Code Online (Sandbox Code Playgroud)
我已经改变了一点功能,吐出了concat,salt,hash和hash_format.
... from the password_compat ...
$salt = substr($salt, 0, $required_salt_len);
$hash = $hash_format . $salt;
$ret = crypt($password, $hash);
if (!is_string($ret) || strlen($ret) <= 13) {
return false;
}
return array( 'concat'=>$ret,
'salt'=>$salt,
'format'=>$hash_format,
'hash_format'=>$hash);
Run Code Online (Sandbox Code Playgroud)
我想结果哈希是的一个CONCAT $hash_format,$salt以及hash......但最后一个字符是不同的...
_
[concat] => $2y$10$oWfFYcNqlcUeGwJM0AFUguSJ5t ..... SvWG
[salt] => oWfFYcNqlcUeGwJM0AFUgw
[hash_format] => $2y$10$oWfFYcNqlcUeGwJM0AFUgw
[format] => $2y$10$
^
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,在crypt函数之前和函数之后,salt中的最后一个字符是不同的.
这怎么可能?
我想libtomcrypt在C#for Encrypt-Decrypt中使用该工具包.我不熟悉C,所以帮助我.工具包的链接:http://www.libtom.org/? page = feature&newsitems = 5& whatfile = crypt
我在GoLang工作我的授权模块.在我们使用PHP5和crypt函数之前.哈希的生成方式与SHA-512相同:
$6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
Run Code Online (Sandbox Code Playgroud)
并存储在数据库中.但现在我需要让它在GoLang中运行.我在Google上搜索并尝试了不同的东西,例如:
t512 := sha512_crypt.Crypt("rasmuslerdorf", "$6$usesomesillystringforsalt$")
fmt.Printf("hash: %v\n", t512)
Run Code Online (Sandbox Code Playgroud)
但都会产生不同的东西.谁能进一步帮助我们?
我们想要验证并创建像php版本一样的哈希.
提前致谢.
我正在使用此函数生成密码:
function generarPassword($password, $cost=11){
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$salt='$'.implode('$',array("2y",str_pad($cost,2,"0",STR_PAD_LEFT),$salt));
return crypt($password,$salt);
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我在64位服务器上使用它时,结果如下:
$2y$11$1ws6drmcqHCWG8wj5bm5s.R8Opc0.JEjXy0.P9UsHjqoxjZQ5GYLW
Run Code Online (Sandbox Code Playgroud)
当我在32位服务器上使用它时,结果如下:
$2uUq69/OVG3M
Run Code Online (Sandbox Code Playgroud)
所以,我有两个问题:
$salt是在两个相同的长度谢谢!
<?php
echo 'SHA-512:' . crypt('rasmuslerdorf', '$6$rounds=5000$usesomesillystringforsalt$');
Run Code Online (Sandbox Code Playgroud)
输出:
SHA-512: $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21
它只使用16个字符的盐:usesomesillystri
Refs: crypt - 单向字符串哈希
题:
提前致谢.
我的 Debian Stretch (9) 上安装了 PostgreSQL 9.6。当我想使用crypt()或gen_salt()函数时,它说:
ERROR: function gen_salt(unknown, integer) does not exist
LINE 1: select gen_salt('bf', 8)
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)
我怎样才能让这些功能正常工作?
我使用crypt()加密我的项目的密码。用户选择密码后,将按以下方式进行加密:
password = crypt(<password chosen>, <user's account name>)
Run Code Online (Sandbox Code Playgroud)
问题是用户使用密码登录时。如果输入的内容与密码不匹配,请检查以下内容:
if (strcmp(crypt(<what user types in as password>, <user's account name>), <user's encrypted password>)) {
//...
}
Run Code Online (Sandbox Code Playgroud)
在某种情况下它不是。假设他们的密码是“ asdf”。如果他们输入带有任何随机结尾字符的“ asdf”,例如“ asdffffff”或“ asdf339sfd”,则该密码仍会接受。似乎忽略了“ asdf”之后的所有内容。
这是隐窝的已知问题吗?还有另一种加密密码的方法吗?