Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.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 js中的mysql密码()_Php_Javascript_Mysql - Fatal编程技术网

Php js中的mysql密码()

Php js中的mysql密码(),php,javascript,mysql,Php,Javascript,Mysql,我想从js生成mysql密码哈希 我知道php函数的方法 $p = "example"; echo("$p<br>"); $p2= sha1($p,true); echo("$p2<br>"); //ĂI')s~űvŠ-Ëo? $result = sha1($p2); echo("$result<br>"); //*57237bb49761f29ab9724ba084e811d70c12393d - this is the same as password

我想从js生成mysql密码哈希

我知道php函数的方法

$p = "example";
echo("$p<br>");
$p2= sha1($p,true);
echo("$p2<br>");   //ĂI')s~űvŠ-Ëo?
$result = sha1($p2);
echo("$result<br>"); //*57237bb49761f29ab9724ba084e811d70c12393d - this is the same as password("example") in mysql

因此,在上面的示例中,您正在调用:
hex_-sha1(hex2bin(hex_-sha1(string)))
。你确定那是对的吗?为什么需要两次
hex_sha1

几个月前,我在JS中需要SHA1,并发现:

。。。而且效果还不错;)

解决方案(部分): 正如你所说,主要问题是字符集编码。似乎在散列数据之前,
MySQL
没有对任何数据进行编码。在处理十六进制数据时,这并不代表问题,但是,
MySQL
UNHEX
hex2bin
在JS中)返回一些不可读的字符,如果我们使用
UTF8
对结果进行编码,则所有字符都会分离

当我在第行编辑JS的SHA1以不对数据进行编码时(我只对该行进行了注释):

一切似乎都很好。然而,当我提供一些
UTF8
字符输入时(例如中欧字符
楓đ
),它又开始失败了

所以,底线是,如果您在
JS
s
SHA1
功能中禁用
UTF8
,并且在输入时不提供
UTF8
字符,那么它可以正常工作


我确信有一个解决方案,比如
JS
函数,它将解码
UTF8
输入,以便JS可以正确地散列它。

因此,在上面的示例中,您正在调用:
hex_-sha1(hex2bin(hex_-sha1(string))
。你确定那是对的吗?为什么需要两次
hex_sha1

几个月前,我在JS中需要SHA1,并发现:

。。。而且效果还不错;)

解决方案(部分): 正如你所说,主要问题是字符集编码。似乎在散列数据之前,
MySQL
没有对任何数据进行编码。在处理十六进制数据时,这并不代表问题,但是,
MySQL
UNHEX
hex2bin
在JS中)返回一些不可读的字符,如果我们使用
UTF8
对结果进行编码,则所有字符都会分离

当我在第行编辑JS的SHA1以不对数据进行编码时(我只对该行进行了注释):

一切似乎都很好。然而,当我提供一些
UTF8
字符输入时(例如中欧字符
楓đ
),它又开始失败了

所以,底线是,如果您在
JS
s
SHA1
功能中禁用
UTF8
,并且在输入时不提供
UTF8
字符,那么它可以正常工作

我确信有一个解决方案,比如
JS
函数,它将解码
UTF8
输入,以便JS可以正确地对其进行哈希运算。

与两种编码一起使用

以下是一个例子:

var password = "TestPassword";
var result = ("*"+CryptoJS.SHA1(CryptoJS.SHA1(password))).toUpperCase();
console.log("result : " + result);
结果将是*0F437A73F4E4014091B7360F60CF81271FB73180。如果您使用mysql password()检查它,它将是相同的:

mysql> select password("TestPassword") as result;
+-------------------------------------------+
| result                                    |
+-------------------------------------------+
| *0F437A73F4E4014091B7360F60CF81271FB73180 |
+-------------------------------------------+
与2个编码一起使用

以下是一个例子:

var password = "TestPassword";
var result = ("*"+CryptoJS.SHA1(CryptoJS.SHA1(password))).toUpperCase();
console.log("result : " + result);
结果将是*0F437A73F4E4014091B7360F60CF81271FB73180。如果您使用mysql password()检查它,它将是相同的:

mysql> select password("TestPassword") as result;
+-------------------------------------------+
| result                                    |
+-------------------------------------------+
| *0F437A73F4E4014091B7360F60CF81271FB73180 |
+-------------------------------------------+

2017年解决方案

下载文件2.5.3-crypto-sha1.js

var key='*'+Crypto.SHA1(Crypto.util.hexToBytes(Crypto.SHA1('test')).toUpperCase(); 键=*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 MySQL中的测试 选择密码('test')/*功能*/ 联合 选择“*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29”/*由javascript生成的键*/ 联合 选择CONCAT(“*”,上部(SHA1(UNHEX(SHA1(‘测试’)));/*Password()函数的逻辑*/
2017年解决方案

下载文件2.5.3-crypto-sha1.js

var key='*'+Crypto.SHA1(Crypto.util.hexToBytes(Crypto.SHA1('test')).toUpperCase(); 键=*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 MySQL中的测试 选择密码('test')/*功能*/ 联合 选择“*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29”/*由javascript生成的键*/ 联合 选择CONCAT(“*”,上部(SHA1(UNHEX(SHA1(‘测试’)));/*Password()函数的逻辑*/

为什么要用javascript来做?如果你知道如何使用php,为什么不从php文件中请求结果呢?是的,因为我想提交密码,也许你应该从你尝试做的事情开始。在javascript中生成哈希密码是不安全的。一旦在服务器上创建密码,您会如何处理它?如果您将密码发送回服务器,则该密码对公众开放。您应该在加密之前发送密码,并在服务器上散列密码,然后再将其存储在数据库中。为什么要使用javascript执行此操作?如果你知道如何使用php,为什么不从php文件中请求结果呢?是的,因为我想提交密码,也许你应该从你尝试做的事情开始。在javascript中生成哈希密码是不安全的。一旦在服务器上创建密码,您会如何处理它?如果您将密码发送回服务器,则该密码对公众开放。您应该在加密之前发送密码,并在将其存储到数据库之前在服务器上散列。因为mysql密码散列就是这样创建的。出于某种原因,它使用了两次sha1算法。我已经厌倦了你的算法,但它在最后给出了9a5355dce26b1adfa0bdbe9f2b2a6e5ae58e5c9d,所以hax2bin是错误的/或者是一些字符编码问题???嗯,我玩了一些
UNHEX
和你的
hex2bin
函数,奇怪的是,当我提供常量参数时,它们的工作原理是一样的。另一方面,当我提供
sha1
hash(两者相同)时,它们输出不同的值。我会继续挖掘更多信息,如果发现任何有用的信息,我会告诉你……我放弃了这个,选择了一种更安全的方式:https我想base64_编码可以完全解决这个问题,因为mysql密码散列就是这样创建的。出于某种原因,它使用了两次sha1算法
mysql> select password("TestPassword") as result;
+-------------------------------------------+
| result                                    |
+-------------------------------------------+
| *0F437A73F4E4014091B7360F60CF81271FB73180 |
+-------------------------------------------+
var key = '*' + Crypto.SHA1(Crypto.util.hexToBytes(Crypto.SHA1('test'))).toUpperCase(); key = *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 Test in MySQL SELECT PASSWORD('test') /* function */ UNION SELECT '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' /* Key generated by javascript */ UNION select CONCAT('*', UPPER(SHA1(UNHEX(SHA1('test'))))); /* Logic for Password() function */