将SHA1从c#转换为android

时间:2017-01-02 13:35:45

标签: c# android sha1

我需要使用这个C#代码并在android中生成相同的哈希:

string result = "2-" + Convert.ToBase64String(new SHA1CryptoServiceProvider().ComputeHash(Encoding.Unicode.GetBytes(password)));

我正在尝试将这个完成数小时,并且仍然会散列不同的代码。 谢谢你的回答。

1 个答案:

答案 0 :(得分:0)

我们走了:

try {
    String password = "qwkld67U";
    MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
    sha1.update(password.getBytes("UTF-16LE"));
    String result = "2-" + Base64.encodeToString(sha1.digest(), Base64.DEFAULT);
    Log.i("SHA1", result);
} catch (Exception e) {
    throw new RuntimeException(e);
}

输出结果为:

I/SHA1: 2-BePLL+2eth1YOoIcbA5sfzD8Yuw=

大多数人都认为字符串编码错误。 .NET中的Encoding.Unicode是一种没有字节顺序标记的UTF-16编码。 Java等价物是UTF-16LE(而不仅仅是UTF-16,它在开头有一个字节顺序标记。)

关于安全反模式。我知道你不在乎。但它可能比我在评论中所怀疑的更糟糕(没有盐的哈希)。如果将散列密码发送到服务器并将其与散列密码进行比较,则首先会破坏密码散列的目的。通过加密连接传输明文密码比传输哈希密码要好得多。让那些负责安全设计的人知道。