“第五十四课--Microduino MD5加密/zh”的版本间的差异
(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的堡垒轰然倒塌,引发了密码学界的轩然大波。(注意:并非是真正的破解,只是加速了杂凑冲撞) 设备
程序#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就可以了
这两个密文就是明文Hello Microduino经过MD5加密后的密文。 步骤三: 证实一下,去md5calculator.chromefans.org 网站证实。 这个结果和我在这个在线MD5的网站计算结果是一致的 结果明文Hello Microduino被MD5加密算法加密成了密文,这段被打散的字符串序列很难被倒推回之前的明文,达到加密的目的。 视频 |