我有一个函数可以在C#中生成MD5哈希,如下所示:
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(data);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString("X2"));
}
return sb.ToString();
在Java中,我的函数如下所示:
MessageDigest m = MessageDigest.getInstance("MD5");
m.update(bytes,0,bytes.length);
String hashcode = new BigInteger(1,m.digest()).toString(16);
return hashcode;
C#代码生成:“ 02945C9171FBFEF0296D22B0607D522D”时,Java代码生成:“
5a700e63fa29a8eae77ebe0443d59239”。
有没有办法为相同的字节数组生成相同的md5哈希?
一经请求:
这是java中的测试代码:
File file = new File(System.getProperty("user.dir") + "/HashCodeTest.flv");
byte[] bytes = null;
try {
bytes = FileUtils.getBytesFromFile(file);
} catch (IOException e) {
fail();
}
try {
generatedHashCode = HashCode.generate(bytes);
} catch (NoSuchAlgorithmException e) {
fail();
}
这是我在C#中的代码
var blob = GetBlobByHttpPostedFile(httpPostedFile);
var hashCode = Md5Factory.ConvertByteArray(blob);
private static byte[] GetBlobByHttpPostedFile(HttpPostedFile httpPostedFile)
{
var contentLength = httpPostedFile.ContentLength;
var result = new byte[contentLength];
var inputStream = httpPostedFile.InputStream;
inputStream.Read(result, 0, contentLength);
return result;
}
干杯
那应该很好-尽管您可以通过调用来简化Java代码
byte[] digest = m.digest(bytes);
而不是调用update
然后digest
。
您是否 绝对确定 在两种情况下都具有相同的数据?您能否发布示例程序,以显示相同的硬编码数据导致此操作失败?
编辑:这是我在想的那种测试。这两个程序给出相同的结果:
C#:
using System;
using System.Security.Cryptography;
using System.Text;
class Test
{
static void Main()
{
byte[] bytes = { 0x35, 0x24, 0x76, 0x12 };
MD5 md5 = new MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(bytes);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < result.Length; i++)
{
sb.Append(result[i].ToString("x2"));
}
Console.WriteLine(sb);
}
}
Java:
import java.math.BigInteger;
import java.security.MessageDigest;
public class Test
{
public static void main(String[] args) throws Exception
{
byte[] bytes = { 0x35, 0x24, 0x76, 0x12 };
MessageDigest m = MessageDigest.getInstance("MD5");
byte[] digest = m.digest(bytes);
String hash = new BigInteger(1, digest).toString(16);
System.out.println(hash);
}
}
问题内容: 是否有任何方法可以在Java中生成字符串的MD5哈希? 问题答案: 你需要。 调用以获取你可以使用的MD5实例。 通过执行以下操作之一来计算哈希: 将整个输入作为并使用进行一次运算来计算哈希。 订阅通过调用一次块。添加完输入字节后,请使用计算哈希值 。 在返回的是MD5哈希值。
问题内容: 如何编写此代码?我已经拥有了,我需要通过单击按钮将相应的md5哈希发送到服务器。 问题答案: 您可以使用crypto-js。 我也建议使用SHA256,而不是MD5。 要通过NPM安装crypto-js: 或者,您可以使用CDN并引用JS文件。 然后,要显示MD5和SHA256哈希,可以执行以下操作: 此处的工作示例JSFiddle 还有其他一些JS函数会生成哈希,如下所述。 http
问题内容: 我对加密/哈希知之甚少。 我必须对加密密钥进行哈希处理。Java中的示例是这样的… 现在,如果我错了,请纠正我,但是上面的代码使用MD5算法对字符串进行了哈希处理。 当我在C#中哈希相同的字符串时,我希望得到相同的结果。 我当前的C#代码看起来像这样… 但是末字节结果不匹配。 Java得到… C#得到… 我需要C#代码才能获得与Java代码相同的结果(不是相反),有什么想法吗? 谢谢。
我正在将一个web应用程序从Ruby移植到Java,并希望允许用户在不重置密码的情况下登录。下面是使用pbkdf2 gem生成哈希的Ruby代码: 读取Ruby gem的源代码时,它使用openssl::digest.new(“sha256”)作为默认散列函数,并生成一个32字节的值,该值使用“unpack(”h*“)”转换为一个64字符串。 所以,在Java,我尝试了以下几种方法: 使用pass
问题内容: 用Java编写的现有系统将字符串的哈希码用作其负载平衡的路由策略。 现在,我 无法修改系统, 但需要生成共享相同哈希码的字符串以测试最坏的情况。 我从命令行提供了这些字符串,并希望系统将所有这些字符串路由到同一目的地。 是否可以生成大量共享相同哈希码的字符串? 为了使这个问题更清楚: 备注:任何hashCode值都是可接受的。字符串是什么没有限制。但是它们应该彼此不同。 编辑:Stri
用Java编写的现有系统使用字符串的哈希代码作为负载平衡的路由策略。 现在,我无法修改系统,但需要生成共享相同哈希代码的字符串来测试最坏的情况。 我从命令行提供这些字符串,并希望系统将所有这些字符串路由到同一个目的地。 有可能生成大量共享相同哈希代码的字符串吗? 为了明确这个问题: 备注:任何hashCode值均可接受。对字符串是什么没有限制。但它们应该彼此不同。 编辑:不接受String类的重写