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