上网参考了很多实例和范文,终于解决了多个字符MD5结果Java与C#一致了,直接上代码~
Java代码
public static String md5One(String s){
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage());
}
md.update(s.getBytes());
return ByteUtil.byteArrayToHexString(md.digest());
}
public static String md5Three(String clientId,String pwd,String timestamp){
clientId=clientId==null?"":clientId;
pwd=pwd==null?"":pwd;
timestamp=timestamp==null?"":timestamp;
while(timestamp.length()<10){
timestamp="0"+timestamp;
}
MessageDigest md = null;
try {
md = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e.getMessage());
}
md.update(clientId.getBytes());
md.update(new byte[7]);
md.update(pwd.getBytes());
md.update(timestamp.getBytes());
return ByteUtil.byteArrayToHexString(md.digest());
}
C#代码
public static string md5One(string s)
{
MD5 md = new MD5CryptoServiceProvider();
byte[] ss = md.ComputeHash(UnicodeEncoding.UTF8.GetBytes(s));
return ByteUtil.byteArrayToHexString(ss);
}
public static string md5Three(String clientId, String pwd, String timestamp)
{
clientId = clientId == null ? "" : clientId;
pwd = pwd == null ? "" : pwd;
timestamp = timestamp == null ? "" : timestamp;
while (timestamp.Length < 10)
{
timestamp = "0" + timestamp;
}
MD5 md = new MD5CryptoServiceProvider();
string s7 = UnicodeEncoding.UTF8.GetString(new byte[7]);
s7 = string.Concat(clientId, s7, pwd, timestamp);
byte[] result = md.ComputeHash(UnicodeEncoding.UTF8.GetBytes(s7));
return ByteUtil.byteArrayToHexString(result);
}
单个字符
string aa = SMGP.util.myMD5.md5One("159753");
//java 5583413443164b56500def9a533c7c70
//C# 5583413443164b56500def9a533c7c70
多个字符
string tt = SMGP.util.myMD5.md5Three("123", "456", "159753");
//java 68ad26b4a406add27a6c659e6f7df508
//C# 68ad26b4a406add27a6c659e6f7df508
通用部分
private static string[] HexCode ={ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
public static string byteToHexString(byte b) {
int n = b;
if (n < 0) {
n = 256 + n;
}
int d1 = n / 16;
int d2 = n % 16;
return HexCode[d1] + HexCode[d2];
}
public static String byteArrayToHexString(byte[] b) {
String result = "";
for (int i = 0; i < b.Length; i++) {
result = result + byteToHexString(b[i]);
}
return result;
}