Javascript CryptoJS和PHPSA256

Javascript CryptoJS和PHPSA256,javascript,php,sha,crypt,Javascript,Php,Sha,Crypt,我希望和php的Crypt SHA256输出匹配 PHP crypt有一个salt和多个回合。例如,对于5000发子弹和“usesomesillystringforsalt”盐,它将是 $hash=crypt('cleartextstring','$5$rounds=5000$usesomesillystringforsalt$) 我希望我不是瞎子,但我找不到如何在crypto js中重现这种行为。它的语法似乎不允许回合或盐 有没有可能或者我应该使用basic而不是crypt CryptoJ

我希望和php的Crypt SHA256输出匹配

PHP crypt有一个salt和多个回合。例如,对于5000发子弹和“usesomesillystringforsalt”盐,它将是


$hash=crypt('cleartextstring','$5$rounds=5000$usesomesillystringforsalt$)

我希望我不是瞎子,但我找不到如何在crypto js中重现这种行为。它的语法似乎不允许回合或盐


有没有可能或者我应该使用basic而不是crypt

CryptoJS API没有提供为SHA256指定salt或轮数的方法。如果需要,您可以手动添加一个盐,指定轮数没有意义,因为“普通”SHA256始终使用固定的轮数(64)

PHP的
crypt()
中的轮数实际上定义了连续应用SHA256算法的频率,以增加暴力攻击的复杂性。对此的评论如下:“通过SHA256重复运行收集的哈希值以消耗CPU周期”

正如您在源代码(和)中所看到的,
crypt()
实际上是一个密钥派生函数,它只使用SHA256生成加密安全的salt哈希。因此,它也不是简单地将给定的盐附加到键上,而是一个更复杂的过程

因此,使用CryptoJS提供的算法无法获得相同的结果。

crypt()
主要用于密码哈希。因此,如果您出于其他目的需要散列,
hash()
是一个不错的选择(当然,创建的结果与
CryptoJS.SHA256()
完全相同)


但是,请记住,使用JavaScript的任何加密通常都是安全的。因此,如果可能,最好在应用程序中使用SSL,并在服务器端生成哈希。如果这是一个选项,请查看。

CryptoJS API没有提供为SHA256指定salt或轮数的方法。如果需要,您可以手动添加一个盐,指定轮数没有意义,因为“普通”SHA256始终使用固定的轮数(64)

PHP的
crypt()
中的轮数实际上定义了连续应用SHA256算法的频率,以增加暴力攻击的复杂性。对此的评论如下:“通过SHA256重复运行收集的哈希值以消耗CPU周期”

正如您在源代码(和)中所看到的,
crypt()
实际上是一个密钥派生函数,它只使用SHA256生成加密安全的salt哈希。因此,它也不是简单地将给定的盐附加到键上,而是一个更复杂的过程

因此,使用CryptoJS提供的算法无法获得相同的结果。

crypt()
主要用于密码哈希。因此,如果您出于其他目的需要散列,
hash()
是一个不错的选择(当然,创建的结果与
CryptoJS.SHA256()
完全相同)


但是,请记住,使用JavaScript的任何加密通常都是安全的。因此,如果可能,最好在应用程序中使用SSL,并在服务器端生成哈希。如果这是一个选项,请查看。

完美答案,感谢您深思熟虑的详细回复。完美答案,感谢您深思熟虑的详细回复。