HUSTOJ 密码加密算法java版

2020年02月29日 78点热度 0人点赞 0条评论

写项目时多次用到了这个,每次都翻之前的代码不太方便,就记录了下来= =

    /**
     * HUSTOJ的加密算法
     *
     * @param password 输入的密码
     * @param saved    真实密码
     */
    private boolean checkPassword(String password, String saved) {
        byte[] base64Bytes = Base64.decode(saved);
        StringBuffer savedBuffer = new StringBuffer();
        for (byte b : base64Bytes) {
            char c = (char) (b & 0xFF);
            savedBuffer.append(c);
        }
        saved = savedBuffer.toString();
        String salt = saved.substring(20);
        password = DigestUtils.md5Hex(password);
        byte[] sha1Bytes = DigestUtils.sha1(password + salt);
        StringBuffer stringBuffer = new StringBuffer();
        for (byte b : sha1Bytes) {
            char c = (char) (b & 0xFF);
            stringBuffer.append(c);
        }
        password = stringBuffer.toString() + salt;
        return password.equals(saved);
    }

第一行Base64是个工具类,随便找一个就行了。

传进来的password无需md5,如果已经md5了,password = DigestUtils.md5Hex(password);这句话去掉。注意md5采用32位小写。

下面附php版本,有问题可以对照着调试。

    private function _check_password($password, $saved)
    {
        $svd = base64_decode($saved);
        $salt = substr($svd, 20);
        $hash = base64_encode(sha1(($password) . $salt, true) . $salt);
        if (strcmp($hash, $saved) == 0) return TRUE;
        return FALSE;
    }

likole

一个后端小白

文章评论