Java SHA-512 hash is not same python SHA-512 code with salt

409 views Asked by At

I want verify hash password that genearte in python in my Java code . but hash generate in java is not same python

python code

def generate_ssha512_password(p: str) -> str:
    if isinstance(p, str):
        p = p.encode()

    p = p.strip()
    salt = urandom(8)
    pw = hashlib.sha512(p)
    pw.update(salt)
    return  b64encode(pw.digest() + salt).decode()


def verify_ssha512_password(challenge_password: Union[str, bytes],
                            plain_password: Union[str, bytes]) -> bool:
    if isinstance(challenge_password, bytes):
        challenge_password = challenge_password.decode()

    if isinstance(plain_password, str):
        plain_password = plain_password.encode()


    # everything after that 64 bytes is the salt.
    if len(challenge_password) < 64:
        return False

    try:
        challenge_bytes = b64decode(challenge_password)
        digest = challenge_bytes[:64]
        salt = challenge_bytes[64:]
        hr = hashlib.sha512(plain_password)
        hr.update(salt)

        return digest == hr.digest()
    except:
        return False
  verify_ssha512_password(
        '0F2/psc+tkd8KrWmoT/LOusFk7cH6mic8nmF4v+qVmVtoxYgJXVEWEfAFfYYLRPQkwRGjgIN5FyWM9ZYdn58Tvs6lloA2SwW',
        'Aa123!@#')
     // is valid

java code

    public static byte[] get_SHA_512_SecurePassword(String passwordToHash, byte[] salt) {
        try {
            MessageDigest md = MessageDigest.getInstance("SHA-512");
            md.update(salt);
            byte[] bytes = md.digest(passwordToHash.getBytes(StandardCharsets.UTF_8));
            return bytes;
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }



    private static boolean verify_ssha512_password(String challenge_password, String plain_password) throws UnsupportedEncodingException {
    
        byte[] challenge_bytes = Base64.decodeBase64(challenge_password.getBytes(StandardCharsets.UTF_8));
        byte[] digest = Arrays.copyOfRange(challenge_bytes, 0, 64);
        byte[] salt = Arrays.copyOfRange(challenge_bytes, 64, challenge_bytes.length);
        return get_SHA_512_SecurePassword(plain_password, salt).equals(digest);
    }


    public static void main(String[] args) throws UnsupportedEncodingException {
        boolean valid=verify_ssha512_password("0F2/psc+tkd8KrWmoT/LOusFk7cH6mic8nmF4v+qVmVtoxYgJXVEWEfAFfYYLRPQkwRGjgIN5FyWM9ZYdn58Tvs6lloA2SwW", "Aa123!@#");
    // is not valid

    }

salt bytes is like this

java salt ---> -5,58,-106,90,0,-39,44,22

python salt ---> 251,58,150,90,0,217,44,22

0

There are 0 answers