Xamarin HMACSHA512在Android上非常慢

时间:2018-01-31 20:07:59

标签: c# security xamarin xamarin.android .net-standard-2.0

我正在运行以下代码并进行10,000次迭代,我在Android(Samsung J5)上获得了近5秒的时间。在Windows(I5)上进行100,000次迭代,我得到200ms。

我无法在Windows Mobile上进行测试,因为Xamarin项目现在的目标是.net标准,它与Windows Mobile不兼容。但实际的应用程序(使用PCL的旧应用程序)显示了类似的结果 - 在Windows Mobile和iOS上几乎是即时的,在Android上几秒钟,对于相同的代码。

有没有办法加速HMACSHA512(或其256版本)?

private void Button_Clicked(object sender, EventArgs e)
{
    ICrypto crypto = DependencyService.Get<ICrypto>();
    Stopwatch watch = new Stopwatch();

    byte[] b = new byte[64];
    watch.Start();
    for (int i = 0; i < 10000; i++)
    {
        b = crypto.CalculateHmac512(b);
    }
    watch.Stop();
    label.Text = watch.ElapsedMilliseconds.ToString();
}

并且

class Crypto : ICrypto
{
    //HMACSHA256 hmac = new HMACSHA256();
    HMACSHA512 hmac = new HMACSHA512();

    public byte[] CalculateHmac512(byte[] m)
    {
        return hmac.ComputeHash(m);
    }
}

1 个答案:

答案 0 :(得分:0)

事实证明,连接到VS时,只有 才会变慢。独立运行时速度更快。

出于某种原因,只有Android会受此影响。 UWP和iOS没有。