CBC MAC:消息长度和长度前置 我想在C++中使用CBC MAC。首先,我希望找到一些分组密码的实现,我将在CBC模式下使用,我知道这是CBC MAC。但我有两个问题:
1) 如果要验证的消息长度不是分组密码块长度的倍数,我该怎么办 2) 为了加强CBCMAC,Wiki上提到的一个推荐方法是将消息的长度放在第一个块中。但是我应该如何将长度编码为字符串呢?还是二进制?如果密码的块长度是64位,我是否将数字编码为64位数字?e、 g.如果消息长度为230,我应使用以下值作为第一个块: 0000000000000000000000000000000000000000000000000000000000000000000000000000000011100110 ?CBC MAC:消息长度和长度前置 我想在C++中使用CBC MAC。首先,我希望找到一些分组密码的实现,我将在CBC模式下使用,我知道这是CBC MAC。但我有两个问题:,c++,authentication,cbc-mac,C++,Authentication,Cbc Mac,1) 如果要验证的消息长度不是分组密码块长度的倍数,我该怎么办 2) 为了加强CBCMAC,Wiki上提到的一个推荐方法是将消息的长度放在第一个块中。但是我应该如何将长度编码为字符串呢?还是二进制?如果密码的块长度是64位,我是否将数字编码为64位数字?e、 g.如果消息长度为230,我应使用以下值作为第一个块: 0000000000000000000000000000000000000000000000000000000000000000000000000000000011100110 ?
有许多块密码的开源C实现,比如AES,很容易找到并开始工作 警告 大概这个问题的目的只是为了学习。任何严肃的使用都应该考虑一个更强的MAC,比如其他评论和一个好的密码库。还有其他一些非常微妙的弱点和攻击,因此您不应该尝试实现自己的加密。我们两人都不是密码专家,这样做只是为了学习 顺便说一句,我推荐Bruce Schneier的以下两本书:
(免责声明:我不是专家)通常用于对齐输入块(您需要填充“长度消息”部分)。如果长度编码由您决定,我打赌它本身应该有一个恒定的长度,并且是明确的。您是否考虑过另一种可能更有效的算法(例如HMAC)?我想你一定应该使用一些加密库(例如)。祝你好运我想知道为什么你的问题很少被关注(肯定有人知道正确的答案),也许应该在crypto.stackexchange.com上提问…(我在这里是很新知道的)带长度预编的CBCMAC应该是相当安全的。PS我的意思是wiki说应该将长度作为消息的第一个块,这就是为什么如果密码块长度为64位,我将其表示为64位整数的原因“块密码的开源C实现,如AES”大多数库使用起来都很麻烦,但我发现AES实现被一个流行软件使用,而且似乎是stableYes,但是你不需要使用整个第一个街区。您可以使用16位长度,前6个字符使用48位。我怀疑你真的需要64位的长度。你看过TomCrypt吗?它有很多实现?很好,我可以使用整个块