**
一、关于数字签名
**
http://blog.csdn.net/oscar999/article/details/9364101
这个地方将的比较详细,可以仔细看看;
数字签名:
将报文按双方约定的HASH算法计算得到一个固定位数的报文摘要。在数学上保证:只要改动报文中任何一位,重新计算出的报文摘要值就会与原先的值不相符。这样就保证了报文的不可更改性。
将该报文摘要值用发送者的私人密钥加密,然后连同原报文一起发送给接收者,而产生的报文即称数字签名
数字证书:
数字证书就是互联网通讯中标志通讯各方身份信息的一系列数据,提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构—–CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。数字证书是一个经证书授权中心数字签名的包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。
最后效果可能是 将固件发给博士,博士计算哈希值 H,并通过tls私钥加密,将加密后的密文与固件一同发送给我们的服务器。
服务器端,收到数据后,将固件信息通过相同的哈希公司计算,得到H1 ,通过TLS公钥解密密文,正确情况应该得到H ,,,判断次数H?=H1 如果相等,则表明固件传输过程中没有被篡改,可以正确升级固件。
二、hash 在程序中使用
(1)在mbedtls 库文件中包括MD5 与sha1 相关代码。
(2)添加头文件 #include “md5.h”
与一下代码:
const char test[]="sadjkldsajgkldjgadsgj";
unsigned char output[16];
size_t ilen= strlen(test);
mbedtls_md5( test, ilen, output );
经测试,计算出32位哈希值存在output[16];数组中。