将java加密转换为php

时间:2014-03-17 20:31:28

标签: java php encryption

我试图在php中创建哈希,但我无法获得正确的哈希值。

java代码是:

if (sPassword == null || sPassword.equals("")) {
        return "empty:";
    } else {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(sPassword.getBytes("UTF-8"));
            byte[] res = md.digest();
            return "sha1:" + StringUtils.byte2hex(res);



        } catch (NoSuchAlgorithmException e) {
            return "plain:" + sPassword;
        } catch (UnsupportedEncodingException e) {
            return "plain:" + sPassword;
        }
    }

有人可以将此翻译成php吗?

例如,如果我在Java中添加以下传递:123456789,则哈希为:sha1:625D7360E198F528978A4D061F3420923AF867C5

2 个答案:

答案 0 :(得分:0)

PHP有一个sha1()函数,你的代码应该是这样的:

<?php
    if ($sPassword == null || $sPassword == "")
    {
        return "empty:";
    }
    else
    {
        if (!function_exists("sha1"))
        {
            return "plain:" . $sPassword;
        }
        else
        {
            return "sha1:" . strtoupper(sha1($sPassword));
        }
    }
?>

需要strtoupper()来使哈希大写,因为sha1()以小写形式返回它。我相信function_exists("sha1")将始终返回false,因为sha1()是内置函数。但也许有一些特定的构建选项,你可以摆脱它。

只需注意:sha1() 会为您提供空密码的哈希值。

答案 1 :(得分:0)

试试这个:

   <?PHP
        $sPassword  =   "enter-password-here";
        if(!empty($sPassword)) {
            return sprintf("sha1 hash: %s", sha1($sPassword));
        } else {
            return "empty";
        }
    ?>