首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HMACSHA256比HMACSHA512快2.5倍

HMACSHA256比HMACSHA512快2.5倍
EN

Cryptography用户
提问于 2018-01-31 19:27:42
回答 1查看 1.1K关注 0票数 1

根据前一个问题的答案,512个版本在x64设备上应该更快。即使它是在x86 (32位)设备上执行的,也不应该有太大的差别。

对这种差异有什么解释吗?(或者必须是实现问题。)

以下代码为HMACSHA512返回了将近5秒,HMACSHA256返回了将近2秒:(它运行在三星的J5 (2015年)上,它有一个带有"CPU位架构64位“的Snap巨龙410处理器。)使用Xamarin.Forms PCL,Droid项目。):

代码语言:javascript
复制
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();
}

代码语言:javascript
复制
class Crypto : ICrypto
{
    //HMACSHA256 hmac = new HMACSHA256();
    HMACSHA512 hmac = new HMACSHA512();

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

(在64位PC上进行100,000次迭代,我得到大约200 64的512,130 64的256。所以我猜Xamarin本身就是32位。但这仍不能解释Android上x2.5的差异。)

EN

回答 1

Cryptography用户

回答已采纳

发布于 2018-01-31 19:53:04

SHA-512内部哈希块为128位字节,而SHA-256为64位。这可以在64位CPU上提供每秒八进制散列的速度优势,但只适用于大型消息。我会尝试8192在那里有64,和200在那里有10000。

SHA-512压缩功能通常需要比SHA-256更长的时间:结构是接近的,变量是SHA-256的两倍,有80轮,而不是64轮(多25%)。移动的数据也大约是原来的两倍,这通常会带来一些损失。然而,总体上所需的时间可能不足两倍,而且由于散列的消息数量是原来的两倍,所以对于大型消息来说,总体上可能有一些好处。

这个问题比较HMAC-SHA-512和HMAC-SHA-256.与直散列相比,HMAC结构增加了至少3次压缩(长键的压缩更多),这进一步增加了64位版本具有边缘之前的消息大小阈值。HMAC-SHA-512具有64位组消息,执行4次压缩,HMAC-SHA-256执行5次(320次).对于一个8192八进制的消息,这是68比132压缩(5440比8448轮),这给HMAC-SHA-512一个机会。

此外,算法的速度,特别是密码,在很大程度上取决于它们的实现质量,以及它是否适合于手头的硬件。从我们的立场来看,我们甚至无法判断HMACSHA512HMACSHA256是否是本机代码,只是在时间上编译或解释。除了本机代码之外,对任何东西进行基准测试都是毫无意义的(如果性能真的很重要,关键部分应该是本地的)和更难(结果往往是不稳定的)。

票数 4
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/55211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档