为什么javascript返回另一个东西和另一个PHP?

时间:2014-12-30 19:59:20

标签: javascript php md5 sha1

我想用php和javascript编码一些字符串... 我的Php代码:

<?php
$number = '8793';
$hash = md5($number);
$hash = sha1($hash);
$hash = md5($hash);
$hash = md5($hash);
$hash = sha1($hash);
$hash = sha1($hash);
$hash = md5($hash);
$hash = sha1($hash);
echo $hash;
?>

它归还给我:4dcfc4eb41e2a44dce5d7180f08a5217f1c6811c

这是我的javascript代码:

<div id="messages"></div>
<script type="text/javascript" src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script>
<script type="text/javascript" src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script>
<script type="text/javascript">
function md5(string)
{
return CryptoJS.MD5(string);
}
function sha1(string)
{
return CryptoJS.SHA1(string);
}
function encode(string)
{
var number = string;
var hash = md5(number);
var hash = sha1(hash);
var hash = md5(hash);
var hash = md5(hash);
var hash = sha1(hash);
var hash = sha1(hash);
var hash = md5(hash);
var hash = sha1(hash);
return hash;
}
var text = '8793';
document.getElementById("messages").innerHTML = encode('8793');
</script>

但是它还给了我8cdd439c88aa2276bdc1ac7cb58b7c403fb6e929 我该如何解决?

2 个答案:

答案 0 :(得分:3)

在您的javascript代码中,当您执行MD5和SHA1时,它返回一个具有实际代码的对象,而不是具有十六进制表示的字符串。这意味着以下操作正在对数值而不是字符串执行散列。

要修复它,请在每一步中转换为字符串:

<div id="messages"></div>
<script type="text/javascript" src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script>
<script type="text/javascript" src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/md5.js"></script>
<script type="text/javascript">
function md5(string)
{
return CryptoJS.MD5(string);
}
function sha1(string)
{
return CryptoJS.SHA1(string);
}
function encode(string)
{
var number = string;
var hash = md5(number);
var hash = sha1('' + hash); // <--- converting to string
var hash = md5('' + hash);
var hash = md5('' + hash);
var hash = sha1('' + hash);
var hash = sha1('' + hash);
var hash = md5('' + hash);
var hash = sha1('' + hash);
return hash;
}
var text = '8793';
document.getElementById("messages").innerHTML = encode('8793');
</script>

通过此修改,Javascript将输出4dcfc4eb41e2a44dce5d7180f08a5217f1c6811c

答案 1 :(得分:1)

除了Theraot解决方案,你可以尝试这样的事情:

http://jsfiddle.net/3ukb41gp/1/

function encode(str)
{
    var number = str;
    var hash = md5(number).toString();
    hash = sha1(hash).toString();
    hash = md5(hash).toString();
    hash = md5(hash).toString();
    hash = sha1(hash).toString();
    hash = sha1(hash).toString();
    hash = md5(hash).toString();
    hash = sha1(hash).toString();
    return hash;
}