почему javascript возвращает другое, а php — другое?

Я хочу закодировать некоторые строки с помощью 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
Как я могу это исправить?

1

Решение

В вашем коде 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,

3

Другие решения

Помимо решения 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;
}
1

По вопросам рекламы [email protected]