一种节省内存的SHA1实现
我正在使用一个非常严格的嵌入式处理器,它只有128字节的RAM。我想在它上面实现SHA1。 RFC3174在'方法2'中描述了一种实现SHA1的方法,该方法不需要分配80个32位字的数组(320字节,显然不实用),看起来它应该可用于我的处理器。但是,我无法找到“方法2”的任何实现,并且RFC中的示例代码仅实现了默认方法。
有人知道在C或C ++中使用SHA1进行内存有效的实现吗?
没有找到相关结果
已邀请:
4 个回复
先对冈蒲
。从消息初始化
,然后执行0到79的循环,在迭代16之后只进行
操作,并且临时计算取决于
s值(0-19使用一个,20-39使用另一个,等等)。需要记住的重要一点是,只要你在处理
数组时使用
或
。 快速修改将是这样的(仔细检查所有访问
以确保我没有错过
):
仍然可以节省成本:摆脱堆栈上的
数组,并将其置于使用您获得的数据预先初始化的上下文中。 此外,在调用此函数之前,您需要进行大量预处理。例如,如果所有消息都少于55个字节,则可以将其放入W数组中,添加填充并立即处理。如果没有,你将不得不两次调用进程:首先使用部分填充的输入,然后再使用其余的pad,等等。这类事情将是非常特定于应用程序的,我怀疑你是否能够找到为你做的代码。 顺便说一句,上面的代码是来自链接的类型1源的直接改编。如果你试图进一步优化它,你可能会更多地挤出它。 我想不出可以节省中间散列的方法,所以你需要总共108个字节(如果计数器也在RAM中则为109),其中24个是本函数的本地,并且可以在其他地方重复使用 - 只要它们也是暂时的。所以做你想做的事很难。 编辑:如果您的所有消息都少于55个字节,您可以通过删除
存储来保存上下文中的另外20个字节。只需从常量初始化A-E,然后在最后添加常量。最后,不要将它们存储在单独的变量中,而是在此函数结束时覆盖输入。
掏得透垦滩
再加几个字节的管家。
作为循环缓冲区即时更新,而不是在每轮开始时生成。
茂坦湿床够
师埠女