http://m.blog.csdn.net/article/details?id=42041329

MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相 同的报文摘要的可能性是非常非常之小的。

MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。除了MD5以外,其中比较有名的还有sha-1、RIPEMD以及Haval等。

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

算法示意图:

linux下生成字符串密文的命令、软件及使用方法如下

这里以字符串123456为例子,它的md5密文值为:e10adc3949ba59abbe56e057f20f883e

这里以1.txt为需要被加密的文件。

一、      用oppnssl md5  加密字符串和文件的方法。

1. oppnssl md5  加密字符串的方法

a.手动输入命令及过程如下:

#openssl        //在终端中输入openssl后回车。

OpenSSL> md5        //输入md5后回车

123456      //接着输入123456,不要输入回车。然后按3次ctrl+d。

123456e10adc3949ba59abbe56e057f20f883e    //123456后面的就是密文了

解释:为何在输入123456后不回车呢?

是因为openssl默认会把回车符当做要加密的字符串中的一个字符,所以得到的结果不同。如果你输入123456后回车,在按2次ctrl+d。得到的结果是:

OpenSSL> md5

123456

f447b20a7fcbf53a5d5be013ea0b15af    //因为openssl不忽略回车符导致的

b.或者直接用管道命令

# echo -n  123456  | openssl md5   //必须要有-n参数,否则就不是这个结果了。

e10adc3949ba59abbe56e057f20f883e

解释:为何要加-n这个参数?

-n就表示不输入回车符,这样才能得到正确的结果。如果你不加-n,那么结果和前面说的一样为:

f447b20a7fcbf53a5d5be013ea0b15af    //因为openssl不忽略回车符导致的

2.用openssl加密文件。

#openssl   md 5   -in   1.txt

##################################################3

Openssl其他相关加密的命令参数:引自:实用命令:利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密 收藏

一. 利用openssl命令进行BASE64编码解码(base64 encode/decode)
1. BASE64编码命令
对字符串‘abc’进行base64编码:
# echo abc | openssl base64
YWJjCg==  (编码结果)

如果对一个文件进行base64编码(文件名t.txt):
# openssl base64 -in t.txt

2. BASE64解码命令
求base64后的字符串‘YWJjCg==’的原文:
# echo YWJjCg== | openssl base64 -d
abc   (解码结果)

如果对一个文件进行base64解码(文件名t.base64):
# openssl base64 -d -in t.base64

二. 利用openssl命令进行md5/sha1摘要(digest)
1. 对字符串‘abc’进行md5摘要计算:echo abc | openssl md5
若对某文件进行md5摘要计算:openssl md5 -in t.txt

2. 对字符串‘abc’进行sha1摘要计算:echo abc | openssl sha1
若对某文件进行sha1摘要计算:openssl sha1 -in t.txt

三. 利用openssl命令进行AES/DES3加密解密(AES/DES3 encrypt/decrypt)

对字符串‘abc’进行aes加密,使用密钥123,输出结果以base64编码格式给出:
# echo abc | openssl aes-128-cbc -k 123 -base64
U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g=   (结果)

对以上结果进行解密处理:
# echo U2FsdGVkX18ynIbzARm15nG/JA2dhN4mtiotwD7jt4g= | openssl aes-128-cbc -d -k 123 -base64
abc  (结果)

若要从文件里取原文(密文)进行加密(解密),只要指定 -in 参数指向文件名就可以了。

进行des3加解密,只要把命令中的aes-128-cbc换成des3就可以了。

注:只要利用openssl help就可以看到更多的安全算法了。

###############################################

二、      利用md5sum命令

A.在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。可以用下面的命令来获取md5sum命令帮助 man md5sum

#md5sum –help

有个提示:“With no FILE, or when FILE is -, read standard input.”翻译过来就是“如果没有输入文件选项或者文件选项为 -   ,则从标砖读取输入内容”,即可以直接从键盘读取字符串来加密。

利用md5sum加密字符串的方法

# md5sum         //然后回车

123456           //输入123456.然后按两次ctrl+d.

显示:

123456e10adc3949ba59abbe56e057f20f883e     红色代表加密后的值

还可以用管道命令:

#echo   -n '123123' | md5sum

或者写成md5加密脚本,名字叫md5.sh,

将以下内容复制进脚本里:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'

保存后,给脚本执行权限。

#sh  md5.sh   123456

显示:e10adc3949ba59abbe56e057f20f883e

B.其实也可以将文本放入文本文件,然后用md5sum 加密改文本,也可以得到字符串加密的值。过程如下:

#touch a.txt

#echo  -n   123456 > a.txt    //将123456写进文本文件,不能丢了 –n参数,避免回车符干扰

#md5sum    a.txt

显示:e10adc3949ba59abbe56e057f20f883e     a.txt

ctrl+d有两个含义:

一是向程序发送文件输入结束符EOF。

二是向程序发送exit退出指令。程序收到信号后具体动作是结束输入、然后等待,还是直接退出,那就要看该程序捕获信号后是如何操作的了。
md5sum属于第一个含义。两次strl+d了,第一次读取EOF指令,再次捕获就会当成exit指令。而shell一类的程序,会直接把ctrl+d解析为退出指令。

三、获取字符串的MD5值:

字符串“hello”的MD5:

  1. $ echo -n 'hello'|md5sum|cut -d ' ' -f1

得到的MD5值:

  1. 5d41402abc4b2a76b9719d911017c592

命令解释:
md5sum: 显示或检查 MD5(128-bit) 校验和,若没有文件选项,或者文件处为"-",则从标准输入读取。
echo -n : 不打印换行符。
cut:  cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。 
        -d 指定与空格和tab键不同的域分隔符。-f1 表示第一个域。参考这里。

获取文件的MD5值:

  1. $ md5sum linuxmint-12-gnome-dvd-32bit.iso|cut -d ' ' -f1

得到的MD5值:
ee3d6e2ca498bc7685b7f17cdb5f2eea

 

使用MD5校验iso文件:

  1. $ md5sum linuxmint-12-gnome-dvd-32bit.iso >linuxmint-12-gnome-dvd-32bit.md5

注意linuxmint-12-gnome-dvd-32bit.md5的内容是:

  1. ef3d6e2ca498bc7685b7f17cdb5f2eea linuxmint-12-gnome-dvd-32bit.iso

把linuxmint-12-gnome-dvd-32bit和其验证文件
    linuxmint-12-gnome-dvd-32bit.md5放到同一目录下用下面的命令:

  1. $ md5sum -c linuxmint-12-gnome-dvd-32bit.md5

如果校验正确则输出: 

  1. linuxmint-12-gnome-dvd-32bit.iso: 确定

如果校验错误则输出:

  1. linuxmint-12-gnome-dvd-32bit.iso: 失败
  2. md5sum: 警告:1/1 生成的校验和不匹配

命令解释:
md5 -c: 从文件中读取MD5 的校验值并予以检查

md5sum/opensll md5的更多相关文章

  1. md5sum.c, md5.c, md5.h

    md5sum.c #include <stdio.h> #include <stdlib.h> #include "md5.h" #pragma warni ...

  2. md5sum检验MD5值

    md5sum命令检验MD5值 md5sum命令用于生成和校验文件的md5值.它会逐位对文件的内容进行校验.是文件的内容,与文件名无关,也就是文件内容相同,其md5值相同.md5值是一个128位的二进制 ...

  3. Linux下通过md5sum生成MD5文件&校验MD5

    生成md5值 随便找个文件执行:md5sum file_name  即可生成该文件对应md5值. 也可以一次生成多个文件的md5值:md5sum file_name1 file_name2 file_ ...

  4. 【Linux】md5sum 生产所有文件的md5值,并对照目标文件是否相同

    现在加入有很多很多文件需要测试md5,想看下是否都传输成功了,如何批量生成文件的md5并且逐条对照呢? 下面来简单介绍下 md5sum这个命令有一个选项"-c" 这个选项的意思是c ...

  5. Linux MD5值递归比对目录中的文件是否有修改

    项目上今天遇到检查两个版本的发布包rc1.tar.gz和rc2.tar.gz的一致性,解决方法做个总结,步骤如下 1. 建立文件夹 mkdir test_rc1 test_rc2 2. 文件解压缩 t ...

  6. Linux 计算某文件夹下的所有文件的md5值

    使用find 命令 find /root -type f -print0 |xargs -0 md5sum >a.md5 校验的话 md5sum -c a.md5

  7. linux shell——md5sum,sha1sum,sort,uniq (转)

    1.文件校验 1. md5sum eg: md5sum filename 注:生成一个128位的二进制位,即32位的十六进制字符串 1.验证文件的正确性: md5sum  file1 file2 &g ...

  8. Shell命令-文件及目录操作之file、md5sum

    文件及目录操作 - file.md5sum 1. file:显示文件的类型 file命令的功能说明 用于辨识文件类型.通过 file 指令,我们得以辨识该文件的类型. file命令的语法格式 file ...

  9. Shell 对整个文件夹中的文件进行MD5校验 [转]

    查看本地文件的 MD5 命令:md5sum FileName查看home目录下所有文件的 MD5 码:cd ~find /home -type f -print0 | xargs -0 md5sum ...

随机推荐

  1. nodejs 服务器实现区分多客户端请求服务

    初始实现 var net = require('net');//1 引入net模块 var chatServer = net.createServer();//创建net服务器 var clientL ...

  2. nginx正向vs反向代理

    1.概述 nginx的正向代理,只能代理http.tcp等,不能代理https请求.有很多人不是很理解具体什么是nginx的正向代理.什么是反向代理.下面结合自己的使用做的一个简介: 1)正向代理: ...

  3. sprint会议1

    昨天:进行第一次站立会议,讨论冲刺阶段,目标,任务认领,制作索引卡. 今天:准备查找安卓APP开发的有关资料,安装有关软件. 遇到的问题:对这方面毫无了解,不知道怎么开始,从哪开始,完全没经验.

  4. 第一个spring冲刺第二天

    讨论成员:王俊凯.罗凯杰.王逸辉.马志磊 地点:宿舍 话题:讨论关于安卓的控件的应用和如何调用 选题:四则运算 方向:更加实用的计算器功能,功能更加实用并且简单,没有太多的繁琐操作,可以的话会加上些趣 ...

  5. sed ,awk , cut三剑客的区别

    sed: sed只能截取文件中以行的来截取数据,,(grep命令可以过滤到某一行) 例如: [root@localhost ~]# sed  -n  '2,3p'  /etc/passwd       ...

  6. 弹出提示框的方式——java

    1.显示一个错误对话框,该对话框显示的 message 为 'alert': JOptionPane.showMessageDialog(null, "alert", " ...

  7. 关于SVM数学细节逻辑的个人理解(二):从基本形式转化为对偶问题

    第二部分:转化为对偶问题进一步简化 这一部分涉及的数学原理特别多.如果有逻辑错误希望可以指出来. 上一部分得到了最大间隔分类器的基本形式:   其中i=1,2,3...m 直接求的话一看就很复杂,我们 ...

  8. python3.6执行AES加密及解密方法

    python版本:3.6.2 首先安装pycryptodome cmd执行命令:pip install pycryptodome 特别简单,代码如下: #!/usr/bin/python # -*- ...

  9. [转帖]go的调度机制.

    调度器 主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/runtime.h文件中) G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象 M代表一个线程,每 ...

  10. C++模板常用功能讲解

    前言 泛型编程是C++继面向对象编程之后的又一个重点,是为了编写与具体类型无关的代码.而模板是泛型编程的基础.模板简单来理解,可以看作是用宏来实现的,事实上确实有人用宏来实现了模板类似的功能.模板,也 ...