Blackberry 编码 MD5 与 C# 中的 MD5 不同

发布于 2024-09-09 01:06:02 字数 1501 浏览 4 评论 0原文

我的密码在 C# 中以 MD5 编码并插入到我的数据库中。

MD5 MD5Hasher = MD5.Create();
byte[] PasswordHash = MD5Hasher.ComputeHash(Encoding.Unicode.GetBytes(PasswordText.Value));

PasswordHash 按原样插入,例如看起来像 0x09C09E5B52580E477514FA.........

在黑莓应用程序中,我获取密码,想要对其进行编码以将其传递给网络服务,该服务将比较两个散列密码。问题是我的结果与我在 Blackberry 应用程序中创建的 MD5 不同。

password = Crypto.encodeStringMD5(password);

然后在我的函数下面:

    public static String encodeStringMD5(String s) throws Exception {
    byte[] bytes = s.getBytes();
    MD5Digest digest = new MD5Digest();
    digest.update(bytes, 0, bytes.length);
    int length = digest.getDigestLength();
    byte[] md5 = new byte[length];
    digest.getDigest(md5, 0, true);
    return convertToHex(md5);
}

private static String convertToHex(byte[] data) {
    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < data.length; i++) {
        int halfbyte = (data[i] >>> 4) & 0x0F;
        int two_halfs = 0;
        do {
            if ((0 <= halfbyte) && (halfbyte <= 9))
                buf.append((char) ('0' + halfbyte));
            else
                buf.append((char) ('a' + (halfbyte - 10)));
            halfbyte = data[i] & 0x0F;
        } while(two_halfs++ < 1);
    }
    return buf.toString();
}

所以它返回类似这样的内容: 07054da3aea1cc98377fe0.........

知道如何获得与我在 Blackberry 中使用 C# 函数创建的相同的哈希密码吗?

谢谢你!

I have my passwords encoded in MD5 in C# and inserted in my DB.

MD5 MD5Hasher = MD5.Create();
byte[] PasswordHash = MD5Hasher.ComputeHash(Encoding.Unicode.GetBytes(PasswordText.Value));

PasswordHash is inserted as is and look like 0x09C09E5B52580E477514FA.......... for example.

In the blackberry app, I get the password, want to encode it to pass it to a web service that will compare both hashed password. The problem is my result is different from the MD5 I create in my Blackberry app.

password = Crypto.encodeStringMD5(password);

Then below my function:

    public static String encodeStringMD5(String s) throws Exception {
    byte[] bytes = s.getBytes();
    MD5Digest digest = new MD5Digest();
    digest.update(bytes, 0, bytes.length);
    int length = digest.getDigestLength();
    byte[] md5 = new byte[length];
    digest.getDigest(md5, 0, true);
    return convertToHex(md5);
}

private static String convertToHex(byte[] data) {
    StringBuffer buf = new StringBuffer();
    for (int i = 0; i < data.length; i++) {
        int halfbyte = (data[i] >>> 4) & 0x0F;
        int two_halfs = 0;
        do {
            if ((0 <= halfbyte) && (halfbyte <= 9))
                buf.append((char) ('0' + halfbyte));
            else
                buf.append((char) ('a' + (halfbyte - 10)));
            halfbyte = data[i] & 0x0F;
        } while(two_halfs++ < 1);
    }
    return buf.toString();
}

So it returns something like this: 07054da3aea1cc98377fe0..........

Any idea how I can get the same hashed password that I create with my C# function in the Blackberry?

Thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

囚你心 2024-09-16 01:06:02

java StringgetBytes() 方法返回的编码与 .NET 中的 Encoding.Unicode 不同。您需要指定明确的编码算法。在两个平台上使用 UTF-8 应该没问题。您还可以尝试向 Java 端的 getBytes 方法提供字符集名称;尝试 getBytes("UTF-16")

The getBytes() method of java String returns a different encoding than the Encoding.Unicode in .NET. You need to specify unambiguous encoding algorithms. Use UTF-8 for both platforms and you should be ok. You can also try providing a charset name to the getBytes method on the Java side; try getBytes("UTF-16")

夜唯美灬不弃 2024-09-16 01:06:02

GregS直接回答了你的问题;但顺便说一句,我建议不要让客户创建 MD5 和。如果服务器管理创建 MD5sum,您可以通过在服务器上对密码进行编码之前向密码添加“盐”值来进一步确保密码无法被逆向工程(例如彩虹表)。如果您在客户端上执行此操作,则必须将盐暴露给客户端,这是不太安全的。

GregS answered your question directly; but as an aside I would recommend against having the client create the MD5 sum. If the server manages creating the MD5sum, you can further ensure that the password can't be reverse engineered (eg rainbow table) by adding a "salt" value to the password before encoding it on the server. If you do that on the client, you must expose the salt to the client which is less secure.

冷清清 2024-09-16 01:06:02

你检查一下格式吗?许多语言创建相同的哈希值,但格式不同。

例如:

5f45r5ssfds544g56fd4gfd56g4f6dgf

5f-45-r5-ss-fd-s5-44-g5-6f-d4-gf-d5-6g-4f-6d-gf >

转换为字符串时尝试检查两种格式。

Do you check the format? Many languages create the same hashes but in different formats.

For example:

5f45r5ssfds544g56fd4gfd56g4f6dgf

vs.

5f-45-r5-ss-fd-s5-44-g5-6f-d4-gf-d5-6g-4f-6d-gf

Try checking for both formats when converting to a string.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文