Welcome

首页 / 软件开发 / C++ / 基于SHA-256的HMAC文件校验器

基于SHA-256的HMAC文件校验器2010-11-29 vckbase GamsnHMAC即带密钥的HASH函数,用它产生的报文鉴别码(MAC)可以实现报文鉴别 。这里我将其做成一个软件,用于对文件的合法性进行校验。以下我先简单介绍 软件相关背景知识再介绍其代码实现。

一、背景知识简介

有时候 进行通信的双方基于安全的考虑需要对对方发过来的消息进行校验,以确定消息 是未经第三方修改过的。这种校验可以这样进行:

双方共同约定一个密钥( 即一个密码),这个密钥是对第三方保密的;

消息的发方使用该密钥对将发 送的消息产生一个校验码,并把该校验码附在消息后一起发出;

消息的接收 方在接收到附有校验码的消息后,将消息和校验码分开,用密钥对该消息生成一 个校验码;

然后将两个校验码相比较,如果相同的话则说明消息是未经第三 方修改的,如果不同的话说明消息很可能被非法修改过(当然也有可能是别的原 因使消息改变了)则该消息不可信,需要对方重发 ;

*其中,生成校验码的 一般采用HMAC,它保证了第三方在不知密钥的情况下,不可能在修改消息后 可以同时修改校验码使之与修改后的消息匹配。

*在整个过程中消息是公 开的(未经加密的),算法只提供消息的完整性校验而不提供保密性,保密性可 由公钥加密算法现实,这里不作讨论。

二、软件的实现

我做的该 软件是可以对电脑磁盘上的任意一文件生成一校验文件.vri(密钥由用户自己输 入),根据该校验文件可以在需要之时对相应的文件进行校验。具体做法将在后 面的例子中给出。

程序中的HMAC算法的HASH函数我采用的是SHA-256算法 ,它比起MD5和SHA-1来要安全。(其实因为不是正式的安全产品,所以在本程序 中采用MD5或SHA-1也未尝不可)。

*HMAC的结构如下图所示:

图一 HMAC的结构