MD5 应该是用的非常多的算法,就自己使用经验说说吧。

场景

算法层面不多说了,维基百科,还有很多文章都有说明。

主要用过的场景

  • 密码存储,现在基本没怎么有使用的了,毕竟破解容易了很多
  • API校验,现在使用的也蛮多的,API双方都有一个私有key,把数据和key放到一起生成token,两边校验(注意的一点是对于unicode编码,一定要encode)
  • 文件校验,这个用的还挺多,大家不要总是忘了这一步,Xcode植入后门就是教训

用法

尽量的列出使用过的方式,多个方式可以相互印证

字符串MD5

Shell 方式

一般都会有 md5sum 命令(Centos)

# echo -n "sweet girl"|md5sum
74417797d6a7200192978659effa5e2d -

或者使用openssl命令

# echo -n "sweet girl"|openssl md5
(stdin)= 74417797d6a7200192978659effa5e2d

Python

代码比较短,这里写成命令方式

# python -c "import hashlib; print hashlib.md5('sweet girl').hexdigest()"
74417797d6a7200192978659effa5e2d

Lua

Lua中没有标准的实现,不过C拓展和纯Lua版本也容易找到,LuaJIT 推荐使用春哥的 lua-resty-string 模块,基于FFI,很快

文件MD5

文件校验使用的比较多的还是文件下载的校验

Shell 方式

# md5sum printf.lua
629fc9a9c1b1debd24e162d817f4e4a7 printf.lua

openssl

# openssl md5 printf.lua
MD5(printf.lua)= 629fc9a9c1b1debd24e162d817f4e4a7

Python

需要一块一块的读取

#coding:utf-8
#@orangleliu
#fname: md5file.py

import hashlib
def md5_for_file(path, block_size=256*128, hr=True):
    md5 = hashlib.md5()
    with open(path,'rb') as f:
        for chunk in iter(lambda: f.read(block_size), b''):
             md5.update(chunk)
    if hr:
        return md5.hexdigest()
    return md5.digest()

if __name__ == "__main__":
    print md5_for_file("printf.lua")

使用

# python md5file.py printf.lua
629fc9a9c1b1debd24e162d817f4e4a7

【Python】Shell MD5使用的那些事的更多相关文章

  1. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  2. 【转载】路径双反斜杠!!!Python IDLE或Python shell中切换路径 切换目录os.chdir("C:\\python37\\2019pythonshel37\\diedai")

    Python IDLE或shell中切换路径在Python自带的编辑器IDLE中或者python shell中不能使用cd命令,那么跳到目标路径呢.方法是使用os包下的相关函数实现路径切换功能. im ...

  3. python shell与反弹shell

    python shell与反弹shell 正常shell需要先在攻击端开机情况下开启程序,然后攻击端运行程序,才能连接 反弹shell,攻击端是服务端,被攻击端是客户端正常shell,攻击端是客户端, ...

  4. python与中文的那点事

    目录 python与中文的那点事 1. utf-8/gbk/unicode/ASCII 2.各种编码之间的转换 3. 统计字符串中数字,字母,汉字的个数 python与中文的那点事 在学习python ...

  5. 解决 Python shell 中 Delete/Backspace 键乱码问题

    简述 进入 Python shell,按下 Delete/Backspace 键,会出现 ^H 字符.命令输入错误后只能从头开始,无法删除,让人很头疼.为了便于后期使用,分享一个一劳永逸的方式. 基本 ...

  6. 基于Python Shell获取hostname和fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  7. Python shell对比

    对Python.shell的一些思考 如果使用python去写脚本来处理日常事务的话,相对于shell是一件比较麻烦的事情,因为我可以使用shell在花费更少的时间内,比较熟练地使用awk.sed和g ...

  8. 常用python shell

    路径及文件操作 创建目录 os.mkdir(path_str) 列出当前文件夹中文件,存入string list中 os.listdir(path_str) 判断路径是否存在 os.path.exis ...

  9. python之md5模块

    python的md5模块使用非常简单,包括以下几个函数: md5.new([arg]) 返回一个md5对象,如果给出参数,则相当于调用了update(arg) md5.updte(arg) 用stri ...

随机推荐

  1. 拦截器(Interceptor)中的invocation.invoke()

    关于在Struts2的自定义的验证拦截器(Interceptor)中的invocation.invoke()是什么意思? package com.xjtu.interceptor; import co ...

  2. Android 多窗口详解

    多窗口支持 Android N 添加了对同时显示多个应用窗口的支持. 在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示. 在电视设备上,应用可以使用"画中 ...

  3. Android加速度传感器

    Android加速度传感器 效果图 手机平放桌面的两张截屏,数据一直在刷新 源码 下载地址(Android Studio工程):http://download.csdn.net/detail/q487 ...

  4. Android简易实战教程--第二十话《通过广播接收者,对拨打电话外加ip号》

    没睡着觉,起来更篇文章吧哈哈!首先祝贺李宗伟击败我丹,虽然我是支持我丹的,但是他也不容易哈哈,值得尊敬的人!切入正题:这一篇来介绍个自定义广播接收者. 通常我们在外拨电话的时候,一般为使用网络电话.如 ...

  5. CUSTOM.PLL的使用

    在开发中对系统标准form的修改一般不建议修改系统原有FORM,对所需要修改的内容一般写在CUSTOM.PLL里即可,应为每个form运行的时候都会调用CUSTOM.PLL具体概念性东西可参考网上资料 ...

  6. 指令汇B新闻客户端开发(四) 自动轮播条

    在这个新闻客户端,我们可以看到有一个轮播页面,在这个项目中,用Handler和一个定时器来做更容易一些, 我们定义一个Handler: private Handler mHandler; 定时器的代码 ...

  7. java操作properties配置文件

    Java中有个类Properties(Java.util.Properties),主要用于读取Java的配置文件,将一些可能需要变化的值存放在properties中进行配置,通常为为.properti ...

  8. android RecycleView Adapter简单封装

    早些时候我们使用系统提供个的BaseAdapter的时候为了满足大家的需要,我们总会对BaseAdapter做一层上层的封装,然后对于实际业务我们只需要关心getView里面的View即可,是代码可读 ...

  9. Android官方推荐使用DialogFragment替换AlertDialog

    DialogFragment是在Android3.0(API level 11)中引入的,它代替了已经不建议使用的AlertDialog. DialogFragment高效地封装和管理对话框的生命周期 ...

  10. Common Bit Tasks

    1) If you XOR a bit with its own negated value, you will always get 1. Therefore thesolution to a ^ ...