Java md5, the PHP way

前端 未结 5 1102
执念已碎
执念已碎 2020-12-14 12:49

I have been working on this for hours, but I can\'t get it to work.

Basically I am developing a REST client in Java for a REST server in PHP. Both the client and the

相关标签:
5条回答
  • 2020-12-14 13:25

    You need to convert the result into the HEX representation. This is how it is done in Fast MD5 library:

        private static final char[] HEX_CHARS = { '0', '1', '2', '3', '4', '5',
                '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', };
    
        /**
         * Turns array of bytes into string representing each byte as unsigned hex
         * number.
         * 
         * @param hash
         *            Array of bytes to convert to hex-string
         * @return Generated hex string
         */
        public static String asHex(byte hash[]) {
            char buf[] = new char[hash.length * 2];
            for (int i = 0, x = 0; i < hash.length; i++) {
                buf[x++] = HEX_CHARS[(hash[i] >>> 4) & 0xf];
                buf[x++] = HEX_CHARS[hash[i] & 0xf];
            }
            return new String(buf);
        }
    

    So you will need to call System.out.println("String3: " + asHex(thedigest));

    0 讨论(0)
  • 2020-12-14 13:28

    Found myself:

    import java.math.BigInteger;
    ..
    public static String md5(String input) throws NoSuchAlgorithmException {
            String result = input;
            if(input != null) {
                MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1"
                md.update(input.getBytes());
                BigInteger hash = new BigInteger(1, md.digest());
                result = hash.toString(16);
                if ((result.length() % 2) != 0) {
                    result = "0" + result;
                }
            }
            return result;
        }
    

    Source: http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or-mysql/

    0 讨论(0)
  • 2020-12-14 13:30

    Give this a try:

    public static String md5(String input) throws NoSuchAlgorithmException {
        String result = input;
        if(input != null) {
            MessageDigest md = MessageDigest.getInstance("MD5"); //or "SHA-1"
            md.update(input.getBytes());
            BigInteger hash = new BigInteger(1, md.digest());
            result = hash.toString(16);
            while(result.length() < 32) { //40 for SHA-1
                result = "0" + result;
            }
        }
        return result;
    }
    

    code from http://web.archive.org/web/20140209230440/http://www.sergiy.ca/how-to-make-java-md5-and-sha-1-hashes-compatible-with-php-or-mysql/

    0 讨论(0)
  • 2020-12-14 13:38

    if you use spring security framework , just do :

    import org.springframework.security.authentication.encoding.*
    
    new Md5PasswordEncoder().encodePassword("myWord",null)
    

    The same result as PHP::md5(). I confirm

    See more examples

    0 讨论(0)
  • 2020-12-14 13:40

    You are outputting the raw md5 output, which is just a bunch of bytes. You would get the same result in php if you said md5("some string", true).

    You need to convert the bytes to ascii characters instead.

    0 讨论(0)
提交回复
热议问题