java和c# md5加密

MD5加密的方式有不少,加鹽的方式更多,最近項目須要java和c#加密結果一致,造成方法以下:java

1.c#加密方法
/// <summary>
/// MD5 加密字符串
/// </summary>
/// <param name="rawPass">源字符串</param>
/// <returns>加密後字符串</returns>
public static string MD5Encoding(string rawPass)
{
// 建立MD5類的默認實例:MD5CryptoServiceProvider
MD5 md5 = MD5.Create();
byte[] bs = Encoding.UTF8.GetBytes(rawPass);
byte[] hs = md5.ComputeHash(bs);
StringBuilder sb = new StringBuilder();
foreach (byte b in hs)
{
// 以十六進制格式格式化
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2.java加密方法
/**
* @param text
* @return 傳統的MD5加密方式,與客戶端加密方法相同
* @throws Exception
*/
public static String TraditionMd5(String text) throws Exception {
//加密後的字符串
byte[] bytes=text.getBytes("utf-8");
byte[] encodeStrByte=DigestUtils.md5Digest(bytes);
String re=bytesToHexFun1(encodeStrByte);
return re;
}c#

private static final char[] HEX_CHAR = {'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};數組

/**
* byte[]數組轉16進制字符串
* @param bytes
* @return
*/
public static String bytesToHexFun1(byte[] bytes) {
// 一個byte爲8位,可用兩個十六進制位標識
char[] buf = new char[bytes.length * 2];
int a = 0;
int index = 0;
for(byte b : bytes) { // 使用除與取餘進行轉換
if(b < 0) {
a = 256 + b;
} else {
a = b;
}ide

buf[index++] = HEX_CHAR[a / 16];
buf[index++] = HEX_CHAR[a % 16];
}ui

return new String(buf);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
裏面帶了 byte[] 轉了十六進制的bytesToHexFun1方法加密

ps :雙倍加鹽加密
public static String DoubleSlatTraditionMd5(String str) throws Exception {
String tmp=TraditionMd5(str+ "{" +salt + "}");
tmp=TraditionMd5(tmp+ "{" +salt + "}");
return tmp;
}
1
2
3
4
5
參考資料
https://blog.csdn.net/worm0527/article/details/69939307
---------------------
做者:黑鴉log
來源:CSDN
原文:https://blog.csdn.net/c0411034/article/details/82256597
版權聲明:本文爲博主原創文章,轉載請附上博文連接!.net

相關文章
相關標籤/搜索