Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET加密中MACTripleDES和HMAC的不同之处_C#_.net_Cryptography - Fatal编程技术网

C# .NET加密中MACTripleDES和HMAC的不同之处

C# .NET加密中MACTripleDES和HMAC的不同之处,c#,.net,cryptography,C#,.net,Cryptography,正如标题所说,我并不真正理解键控哈希算法的两种实现之间的区别(或者准确地说,MACTripleDES和HMAC的实现之间的区别) 两者都可以ComputeHash()和HashCore()。我看到的唯一区别是,在MACTripleDES中,您可以指定要使用哪种类型的哈希函数,以及: HMAC的HashCore(): 将写入对象的数据路由到默认HMAC哈希算法中,以计算哈希值 MACTripleDES的HashCore(): 将写入对象的数据路由到TripleDES加密程序中,以计算消息身份验证码

正如标题所说,我并不真正理解键控哈希算法的两种实现之间的区别(或者准确地说,
MACTripleDES
HMAC
的实现之间的区别)

两者都可以
ComputeHash()
HashCore()
。我看到的唯一区别是,在
MACTripleDES
中,您可以指定要使用哪种类型的哈希函数,以及:

HMAC的HashCore():

将写入对象的数据路由到默认HMAC哈希算法中,以计算哈希值

MACTripleDES的HashCore():

将写入对象的数据路由到TripleDES加密程序中,以计算消息身份验证码(MAC)


根据我对MAC的了解,您可以使用键控哈希算法来消化消息,从而生成MAC。因此,在
MACTripleDES
中,您使用一些散列算法对消息进行散列,然后使用TripleDES对其进行加密以生成MAC,而在
HMAC
中,您只是直接对原始消息使用一些键控散列算法?

MACTripleDES
不使用散列函数来计算MAC。它使用
TripleDES
,这是一种加密算法

HMAC
是一个
abstract
类,意味着您不能实例化该类本身。你必须从中汲取教训

来自
HMAC
的派生类在内部调用
HashCore
HashCore
被重写以对每个派生类执行特定的哈希函数:

  • MD5用于HMACMD5
  • RIPEMD-160适用于HMACRIPEMD160
  • SHA-1适用于HMACSHA1
  • SHA-256适用于HMACSHA256
  • SHA-386适用于HMACSHA384
  • SHA-512适用于HMACSHA512
源于
KeyedHashAlgorithm
MACTripleDES
,也有一个
HashCore
方法,但它与
HMAC
中的方法不同。此
HashCore
方法定义为专门使用
TripleDES
来计算MAC。因此,您不能“指定要使用哪种类型的哈希函数”

由于
TripleDES
不是散列函数,因此它不应该也不应该派生自
HMAC

附录:

根据现已撤销的FIPS 113文件:

第三代DAC

数据认证算法(DAA)利用数据 FIPS中指定的加密标准(DES)加密算法 第46号酒吧。DES算法转换(或加密)64位输入 使用加密密钥将向量转换为64位输出向量。让我们一起去吧 任意64位输入向量,并假定已选择一个键。64位 向量O,当DES为 应用于D,使用加密操作,表示为 接着

O=e(D)

要验证的数据(例如记录、文件、消息或程序) 被分组为连续的64位块:D1、D2、,。。。。Dn。如果号码是 如果数据位不是64的倍数,则最终输入块将 是部分数据块,左对齐。将零附加到 形成完整的64位块。DAC的计算由以下公式给出: 下列等式中,+表示两个的异或 向量

01=e(D1)
02=e(D2+01)
03=e(D3+02)
On=e(Dn+0n-1)

DAC从On中选择。实施DAA的装置应: 能够选择On最左边的M位作为DAC,其中16位< M<64,M是8的倍数。DAC生成的框图 附录1给出了一个示例,附录2给出了一个示例。这个 初始化向量(IV)=0的密码块链接模式(CBC) 以及IV=D1且数据等于D2的64位密码反馈模式, D3、…、Dn(见FIPS PUB 81)均产生所需的DAC计算

正如您所看到的,使用CBC模式加密的是数据(64位块)。MAC是最后一个被截断为24位到56位(含24位)的加密数据块

尽管FIPS 113将
DES
指定为算法,但同样适用于
TripleDES


注意:由于
DES
TripleDES
是不安全的,因此
MACTripleDES
也是不安全的。这就是FIPS 113被撤销的原因。

MACTripleDES
不使用哈希函数来计算MAC。它使用
TripleDES
,这是一种加密算法

HMAC
是一个
abstract
类,意味着您不能实例化该类本身。你必须从中汲取教训

来自
HMAC
的派生类在内部调用
HashCore
HashCore
被重写以对每个派生类执行特定的哈希函数:

  • MD5用于HMACMD5
  • RIPEMD-160适用于HMACRIPEMD160
  • SHA-1适用于HMACSHA1
  • SHA-256适用于HMACSHA256
  • SHA-386适用于HMACSHA384
  • SHA-512适用于HMACSHA512
源于
KeyedHashAlgorithm
MACTripleDES
,也有一个
HashCore
方法,但它与
HMAC
中的方法不同。此
HashCore
方法定义为专门使用
TripleDES
来计算MAC。因此,您不能“指定要使用哪种类型的哈希函数”

由于
TripleDES
不是散列函数,因此它不应该也不应该派生自
HMAC

附录:

根据现已撤销的FIPS 113文件:

第三代DAC

数据认证算法(DAA)利用数据 加密标准