我想用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 我该如何解决?
答案 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;
}