Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php中的Ruby sha512密码检索_Php_Ruby_Hash_Passwords_Sha512 - Fatal编程技术网

php中的Ruby sha512密码检索

php中的Ruby sha512密码检索,php,ruby,hash,passwords,sha512,Php,Ruby,Hash,Passwords,Sha512,(由于对我的问题有些混淆而更新)我们使用此方法生成一个摘要的_密码,并将其保存到数据库中供以后查找。当我们对应用程序的用户进行身份验证时,该方法将再次针对他们的输入运行,如果摘要的_密码输出与我们保存在数据库中的摘要的_密码匹配,我们将对他们进行身份验证。我需要在PHP中为另一个共享数据库的应用程序重现此函数 def self.hash_password( password, salt ) salted_password = password.insert 4, salt digeste

(由于对我的问题有些混淆而更新)我们使用此方法生成一个摘要的_密码,并将其保存到数据库中供以后查找。当我们对应用程序的用户进行身份验证时,该方法将再次针对他们的输入运行,如果摘要的_密码输出与我们保存在数据库中的摘要的_密码匹配,我们将对他们进行身份验证。我需要在PHP中为另一个共享数据库的应用程序重现此函数

def self.hash_password( password, salt )
  salted_password = password.insert 4, salt
  digested_password = Digest::SHA512.hexdigest("#{salted_password}")
  return digested_password
end
我真的没有Ruby方面的经验,所以请原谅我的理解力不足

谢谢

是a,这意味着您无法轻松获得任何给定输出的输入

这是可能的,但非常昂贵,建立一个新的。因为这是一个盐散列,所以更难的是

是一个,这意味着您无法轻松获得任何给定输出的输入

这是可能的,但非常昂贵,建立一个新的。因为这是一个salt散列,所以更难

因为你不能从像SHA-512这样的单向散列中“检索”密码,我们能得到的最接近的结果就是能够从相同的密码和salt生成相同的散列。让我们看看Ruby代码:

def self.hash_password( password, salt )
  salted_password = password.insert 4, salt
  digested_password = Digest::SHA512.hexdigest("#{salted_password}")
  return digested_password
end
这里唯一有点“奇怪”的是对密码字符串的调用。它基本上是从第四个字符索引开始,将salt正确地拼接到密码中。通常,密码只是与密码连接在一起

我们可以使用以下方法复制此功能:

我在这里使用的是现在的默认值,因为它几乎是生成SHA-512哈希的最可靠的方法

使用此代码,您应该能够为给定的相同密码和salt组合生成相同的哈希。我不确定当密码长度小于五个字符时会发生什么行为


是的,看起来它应该能工作:

[charles@lobotomy ~]$ irb
irb(main):001:0> require 'digest/sha2'
=> true
irb(main):002:0> def hash_password( password, salt )
irb(main):003:1>   salted_password = password.insert 4, salt
irb(main):004:1>   digested_password = Digest::SHA512.hexdigest("#{salted_password}")
irb(main):005:1>   return digested_password
irb(main):006:1> end
=> nil
irb(main):007:0* puts hash_password('password', 'salt')
92d3efdbf51d199b0930c427b77dc8d5cf41ac58b6fab5f89cc3f32d719a8f6ffcdff6211bdd0565a6e7b09925839e5dcce1fa5abf65eca87c6a883ab0b510b9
=> nil
irb(main):018:0> exit
[charles@lobotomy ~]$ 
[charles@lobotomy ~]$ php -a
Interactive shell

php > function hash_password($password, $salt) {
php {     $salted_password = substr($password, 0, 4) . $salt . substr($password, 4);
php {     return hash('sha512', $salted_password);
php { }
php > echo hash_password('password', 'salt');
92d3efdbf51d199b0930c427b77dc8d5cf41ac58b6fab5f89cc3f32d719a8f6ffcdff6211bdd0565a6e7b09925839e5dcce1fa5abf65eca87c6a883ab0b510b9
php >
因为您无法从单向散列(如SHA-512)中“检索”密码,所以我们能得到的最接近的结果是能够从相同的密码和salt生成相同的散列。让我们看看Ruby代码:

def self.hash_password( password, salt )
  salted_password = password.insert 4, salt
  digested_password = Digest::SHA512.hexdigest("#{salted_password}")
  return digested_password
end
这里唯一有点“奇怪”的是对密码字符串的调用。它基本上是从第四个字符索引开始,将salt正确地拼接到密码中。通常,密码只是与密码连接在一起

我们可以使用以下方法复制此功能:

我在这里使用的是现在的默认值,因为它几乎是生成SHA-512哈希的最可靠的方法

使用此代码,您应该能够为给定的相同密码和salt组合生成相同的哈希。我不确定当密码长度小于五个字符时会发生什么行为


是的,看起来它应该能工作:

[charles@lobotomy ~]$ irb
irb(main):001:0> require 'digest/sha2'
=> true
irb(main):002:0> def hash_password( password, salt )
irb(main):003:1>   salted_password = password.insert 4, salt
irb(main):004:1>   digested_password = Digest::SHA512.hexdigest("#{salted_password}")
irb(main):005:1>   return digested_password
irb(main):006:1> end
=> nil
irb(main):007:0* puts hash_password('password', 'salt')
92d3efdbf51d199b0930c427b77dc8d5cf41ac58b6fab5f89cc3f32d719a8f6ffcdff6211bdd0565a6e7b09925839e5dcce1fa5abf65eca87c6a883ab0b510b9
=> nil
irb(main):018:0> exit
[charles@lobotomy ~]$ 
[charles@lobotomy ~]$ php -a
Interactive shell

php > function hash_password($password, $salt) {
php {     $salted_password = substr($password, 0, 4) . $salt . substr($password, 4);
php {     return hash('sha512', $salted_password);
php { }
php > echo hash_password('password', 'salt');
92d3efdbf51d199b0930c427b77dc8d5cf41ac58b6fab5f89cc3f32d719a8f6ffcdff6211bdd0565a6e7b09925839e5dcce1fa5abf65eca87c6a883ab0b510b9
php >

我想出来了。我不太理解Ruby中的insert方法,结果证明salt是在密码的第四个字符处插入的。以下是PHP的等价物:

$password_input = "derpaderp";
$password_salt = "aderp";
$arg=substr_replace($password_input, $password_salt, 4, 0);
$pass = hash('sha512', $arg);
if ( $digested_password_from_database == $pass ){ echo "success!"; }

谢谢各位的回复。

我想明白了。我不太理解Ruby中的insert方法,结果证明salt是在密码的第四个字符处插入的。以下是PHP的等价物:

$password_input = "derpaderp";
$password_salt = "aderp";
$arg=substr_replace($password_input, $password_salt, 4, 0);
$pass = hash('sha512', $arg);
if ( $digested_password_from_database == $pass ){ echo "success!"; }

谢谢各位的回复。

我想我的问题不是很清楚,但我们实际上是在数据库中存储已消化的密码和密码。当用户登录到系统时,此函数将根据用户输入和salt运行,如果数据库中的加密密码与此方法中的digest_密码匹配,我们将对其进行身份验证。我只需要为共享此数据库的另一个应用程序提供一个PHP等价物。抱歉搞混了@在这种情况下,我在这里创建的函数应该可以完成这项工作。如果字符串太短,Ruby将触发一个错误。所以PHP版本在短字符串上做什么可能并不重要,因为这是用于身份验证的。@konforce,这很好知道——PHP在这里的行为只是将超出范围的子字符串视为空,而不是抱怨被告知要做疯狂的事。加油,PHP!我想我的问题不是很清楚,但我们实际上是在数据库中存储经过消化的密码和它们的salt。当用户登录到系统时,此函数将根据用户输入和salt运行,如果数据库中的加密密码与此方法中的digest_密码匹配,我们将对其进行身份验证。我只需要为共享此数据库的另一个应用程序提供一个PHP等价物。抱歉搞混了@在这种情况下,我在这里创建的函数应该可以完成这项工作。如果字符串太短,Ruby将触发一个错误。所以PHP版本在短字符串上做什么可能并不重要,因为这是用于身份验证的。@konforce,这很好知道——PHP在这里的行为只是将超出范围的子字符串视为空,而不是抱怨被告知要做疯狂的事。加油,PHP!令人惊叹的直到我回答了问题才看到你的答复。这是一个更好的实现,谢谢!令人惊叹的直到我回答了问题才看到你的答复。这是一个更好的实现,谢谢!