我已经工作了好几个小时,但是我无法让它工作.
基本上我正在使用Java开发REST客户端,用于PHP中的REST服务器.客户端和服务器都必须计算字符串的md5,服务器将比较它们以进行身份验证(kinda).
在服务器上,PHP代码是:
md5("getTokenapi_keybf8ddfs845jhre980543jhsjfro93fd8capi_ver1tokeniud9ER£jdfff");
Run Code Online (Sandbox Code Playgroud)
产生:
4d7b2e42c3dfd11de3e77b9fe2211b87
Run Code Online (Sandbox Code Playgroud)
太好了!
这是客户端的代码:
import java.security.*;
....
String s = "getTokenapi_keybf8ddfs845jhre980543jhsjfro93fd8capi_ver1tokeniud9ER£jdfff";
byte[] bytesOfMessage = s.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(bytesOfMessage);
System.out.println("String2: " + thedigest);
System.out.println("String3: " + new String(thedigest));
Run Code Online (Sandbox Code Playgroud)
这会产生:
String2: [B@42e816
String3: M{.B?????{??!?
Run Code Online (Sandbox Code Playgroud)
我怎样才能让Java以与PHP相同的方式计算md5总和,好吗?
谢谢,丹
xil*_*il3 22
尝试一下:
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;
}
Run Code Online (Sandbox Code Playgroud)