在过去的5个小时里,我试图做一些应该非常简单的事情,并在C#中用10分钟完成,但是没有运气的Java.我有一个32 UpperCase和Numeric String(A-Z0-9),我需要将这个String转换为Dec,然后md5它.我的问题是我没有未编译的字节所以我不能md5我的数组:\
这是我在python中需要做的事情:
salt = words[1].decode("hex")
passwordHash = generatePasswordHash(salt, pw)
generatePasswordHash(salt, password):
m = md5.new()
m.update(salt)
m.update(password)
return m.digest()
Run Code Online (Sandbox Code Playgroud)
这里是C#:
public static string GeneratePasswordHash(byte[] a_bSalt, string strData) {
MD5 md5Hasher = MD5.Create();
byte[] a_bCombined = new byte[a_bSalt.Length + strData.Length];
a_bSalt.CopyTo(a_bCombined, 0);
Encoding.Default.GetBytes(strData).CopyTo(a_bCombined, a_bSalt.Length);
byte[] a_bHash = md5Hasher.ComputeHash(a_bCombined);
StringBuilder sbStringifyHash = new StringBuilder();
for (int i = 0; i < a_bHash.Length; i++) {
sbStringifyHash.Append(a_bHash[i].ToString("X2"));
}
return sbStringifyHash.ToString();
}
protected byte[] HashToByteArray(string strHexString) {
byte[] a_bReturn = new byte[strHexString.Length / 2];
for (int i = 0; i < a_bReturn.Length; i++) {
a_bReturn[i] = Convert.ToByte(strHexString.Substring(i * 2, 2), 16);
}
return a_bReturn;
}
Run Code Online (Sandbox Code Playgroud)
我很乐意得到这方面的帮助:)
将十六进制字符串解析为字节:(byte) Integer.parseInt(s, 16).
要将密码字符串转换为字节数组,请使用默认编码(我建议不要执行此操作:始终指定特定编码):( password.getBytes()或password.getBytes(encoding)针对特定编码).
散列字节数组:MessageDigest.getInstance("MD5").digest(byte[]).
将字节转换为十六进制字符串:请参阅在Java中,如何在保持前导零的同时将字节数组转换为十六进制数字字符串?