前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【每周一坑】校验文件哈希

【每周一坑】校验文件哈希

作者头像
Crossin先生
发布2018-04-17 11:32:47
8660
发布2018-04-17 11:32:47
举报

先说个通知,给参与了码上行动的同学:又一期展示学习成果的编程擂台活动开始了,即是练手的好机会,又能得到助教的全程支持,还可以得积分赢奖金。赶紧来报名吧!从课程首页进入活动或联系答疑群内助教参与。(可点击文末 阅读原文

之前的两届战况:

只学2个月编程能写出什么代码?他们表示:You can you code!

【编程擂台】第2季 - 又一批码上行动学员作品新鲜出炉(附学习感言)

今天要出的题目源自安全界大牛余弦的一篇文章:我是如何 Python 一句话校验软件哈希值的。@褚瑞 同学也在群里推荐了这个题目。

我们经常看到软件的下载页面会注明这个软件的哈希值。可能你从没在意,但这其实是个蛮重要的东西,它可以用来验证你下载的软件是否被人动过手脚。

Python 下载页面上标出的 MD5 Sum

早些时候 Mac 上爆出的 XCodeGhost 木马事件,引发的一个重要环节就是因为部分开发人员既没有从官方渠道下载,又没有验证软件哈希值,以至于使用了被植入代码的开发工具。

那么问题来了:

请用 Python 写一个小程序,用来计算指定文件的哈希值。

附加题:

可以指定哈希加密算法,并让程序尽可能简单易用。

虽然 Linux 和 Unix 有现成的验证哈希命令,Windows 也有类似软件。不过既然是练习嘛,自己做一遍,会让你对相关的概念有更清楚的认识。

期待各位同学提交解答。

提交代码可以使用 paste.ubuntu.com 或 codeshare.io 等代码分享网站,只需将代码复制上去保存,即可获得一个分享地址,非常方便。

往期问题可通过公众号菜单栏“课外辅导”栏目中进入查看。‍

【解答】验证哥德巴赫猜想

这道题要实现功能并不难。如果你以前写过判断质数的代码,那只要在其基础上多加一层循环,判断相加的两个数是否都是质数即可。

一个参考解答:

代码语言:javascript
复制
# -*- coding: utf-8 -*-
import math

def goldbach(num):
    # 断言 num 为偶数并且大于 2
    assert num % 2 == 0 and num > 2, 'num 应为偶数'
    # 仅找出一组数据
    for i in range(2, num):
        # 满足两数之和为 num 并且都为质数
        if is_prime(i) and is_prime(num-i):
            print('{0} 可由两个素数:{1} 和 {2} 组成'.format(num, i, num-i))
            break

def is_prime(num):
    # 判断 2 的倍数
    if num == 2:
        return True
    elif num % 2 == 0:
        return False
    # 判断 3 到 sqrt(num) + 1 的奇数
    sqrt_num = int(math.sqrt(num))
    for i in range(3, sqrt_num+1, 2):
        if num % i == 0:
            return False
    return True

goldbach(12345678)

输出:

代码语言:javascript
复制
12345678 可由两个素数 31 和 12345647 组成

附上两份同学提交的解答:

@张贺

遍历2以上N的平方根以下的每一个整数或奇数,是不是能整除N,并比较了两种方法耗时。

http://paste.ubuntu.com/24666659/

@徐大龙

遍历2以上N的平方根以下的每一个整数,是不是能整除N,写法简单易懂。

https://github.com/PeytonXu/learn-python/blob/master/cases/gold_bach/gold_bach.py

『码上行动』在线学习班正在开放中,详情请回复 码上行动 查看

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-06-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 【解答】验证哥德巴赫猜想
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档