“第五十四课--Microduino MD5加密/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Created page with "MD5加密")
 
MD5加密
 
(未显示同一用户的5个中间版本)
第1行: 第1行:
MD5加密
+
{| style="width: 800px;"
 +
|-
 +
|
 +
==目的==
 +
 
 +
本教程将介绍如何使用最常用的加密方法MD5加密,并在Microduino中解释加密的正确性。
 +
 
 +
==MD5加密==
 +
 
 +
'''介绍:'''
 +
 
 +
Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)
 +
 
 +
对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
 +
 
 +
'''优势:'''
 +
 
 +
Van oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。上面所有这些都不足以成为MD5的在实际应用中的问题。并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。
 +
 
 +
'''弱点:'''
 +
 
 +
2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。(注意:并非是真正的破解,只是加速了杂凑冲撞)
 +
 
 +
==设备==
 +
*'''[[Microduino-Core/zh]]'''
 +
*'''[[Microduino-USBTTL/zh]]'''
 +
 
 +
 
 +
*其他硬件设备
 +
**USB数据连接线  一根
 +
**面包板跳线      一盒
 +
 
 +
 
 +
==程序==
 +
 
 +
<source lang="cpp">
 +
#include "MD5.h"
 +
/*
 +
This is en example of how to use my MD5 library. It provides two
 +
easy-to-use methods, one for generating the MD5 hash, and the second
 +
one to generate the hex encoding of the hash, which is frequently used.
 +
*/
 +
void setup()
 +
{
 +
  //initialize serial
 +
  Serial.begin(9600);
 +
  //give it a second
 +
  delay(1000);
 +
  //generate the MD5 hash for our string
 +
  unsigned char* hash=MD5::make_hash("Hello Microduino");
 +
  //generate the digest (hex encoding) of our hash
 +
  char *md5str = MD5::make_digest(hash, 16);
 +
  //print it on our serial monitor
 +
  Serial.println(md5str);
 +
 
 +
  char* test="Hello Microduino";
 +
  unsigned char* hash2=MD5::make_hash(test);
 +
  md5str=MD5::make_digest((unsigned char*)hash2, 16);
 +
  Serial.println(md5str);
 +
 
 +
}
 +
 
 +
void loop()
 +
{
 +
}
 +
</source>
 +
 
 +
==调试==
 +
 
 +
步骤一:下载代码,运行。如果编译出错的话是因为你本地没有 [[https://github.com/tzikis/ArduinoMD5 ArduinoMD5]]库,下载安装好后,再重启IDE就可以了
 +
 
 +
 
 +
步骤二:
 +
打开串口通讯,会显示两行密文,如下图:
 +
[[File:MicroduinoMD5.jpg|600px|center|thumb]]
 +
这两个密文就是明文Hello Microduino经过MD5加密后的密文。
 +
 
 +
步骤三:
 +
证实一下,去[http://md5calculator.chromefans.org md5calculator.chromefans.org] 网站证实。
 +
[[File:MicroduinoMD5_1.jpg|600px|center|thumb]]
 +
 
 +
这个结果和我在这个在线MD5的网站计算结果是一致的
 +
 
 +
==结果==
 +
 
 +
明文Hello Microduino被MD5加密算法加密成了密文,这段被打散的字符串序列很难被倒推回之前的明文,达到加密的目的。
 +
 
 +
==视频==
 +
 
 +
|}

2014年11月13日 (四) 07:26的最新版本

目的

本教程将介绍如何使用最常用的加密方法MD5加密,并在Microduino中解释加密的正确性。

MD5加密

介绍:

Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。该算法的文件号为RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data Security Inc. April 1992)

对MD5算法简要的叙述可以为:MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。

优势:

Van oorschot和Wiener曾经考虑过一个在散列中暴力搜寻冲突的函数(brute-force hash function),而且他们猜测一个被设计专门用来搜索MD5冲突的机器(这台机器在1994年的制造成本大约是一百万美元)可以平均每24天就找到一个冲突。但单从1991年到2001年这10年间,竟没有出现替代MD5算法的MD6或被叫做其他什么名字的新算法这一点,我们就可以看出这个瑕疵并没有太多的影响MD5的安全性。上面所有这些都不足以成为MD5的在实际应用中的问题。并且,由于MD5算法的使用不需要支付任何版权费用的,所以在一般的情况下(非绝密应用领域。但即便是应用在绝密领域内,MD5也不失为一种非常优秀的中间技术),MD5怎么都应该算得上是非常安全的了。

弱点:

2004年8月17日的美国加州圣巴巴拉的国际密码学会议(Crypto’2004)上,来自中国山东大学的王小云教授做了破译MD5、HAVAL-128、 MD4和RIPEMD算法的报告,公布了MD系列算法的破解结果。宣告了固若金汤的世界通行密码标准MD5的堡垒轰然倒塌,引发了密码学界的轩然大波。(注意:并非是真正的破解,只是加速了杂凑冲撞)

设备


  • 其他硬件设备
    • USB数据连接线 一根
    • 面包板跳线 一盒


程序

#include "MD5.h"
/*
This is en example of how to use my MD5 library. It provides two
 easy-to-use methods, one for generating the MD5 hash, and the second
 one to generate the hex encoding of the hash, which is frequently used.
 */
void setup()
{
  //initialize serial
  Serial.begin(9600);
  //give it a second
  delay(1000);
  //generate the MD5 hash for our string
  unsigned char* hash=MD5::make_hash("Hello Microduino");
  //generate the digest (hex encoding) of our hash
  char *md5str = MD5::make_digest(hash, 16);
  //print it on our serial monitor
  Serial.println(md5str);

  char* test="Hello Microduino";
  unsigned char* hash2=MD5::make_hash(test);
  md5str=MD5::make_digest((unsigned char*)hash2, 16);
  Serial.println(md5str);

}

void loop()
{
}

调试

步骤一:下载代码,运行。如果编译出错的话是因为你本地没有 [ArduinoMD5]库,下载安装好后,再重启IDE就可以了


步骤二: 打开串口通讯,会显示两行密文,如下图:

MicroduinoMD5.jpg

这两个密文就是明文Hello Microduino经过MD5加密后的密文。

步骤三: 证实一下,去md5calculator.chromefans.org 网站证实。

MicroduinoMD5 1.jpg

这个结果和我在这个在线MD5的网站计算结果是一致的

结果

明文Hello Microduino被MD5加密算法加密成了密文,这段被打散的字符串序列很难被倒推回之前的明文,达到加密的目的。

视频