自律是什么?自己控制自己。这是一件很难的事情,很多时候,你并不受你自己的意识管控,明明要写作业,非要拿起了手机,明明发誓不玩电脑,却还是打开了Steam…那么我们不妨换个思路,让计算机来帮助你自律。
这个思路其实非常简单,但是非常有效。把自律交给计算机/手机的实例已经有很多,比如手机上的锁机软件,甚至某宝卖的自律神器,能把手机装进密封盒里,到时间后才能打开。但是今天我们要介绍的思路更加普遍适用。
一般的自律神器都有它的局限性,比如手机锁机软件总有这样或者那样的方法破解,密封盒也只能放进手机,对于其他东西也没有作用。既然如此,我们就从底层出发来减少这个局限性。
密码是一个非常底层的东西,手机有密码,电脑有密码,文件可以加密。但是这个密码在日常生活中是我们管控的,目的是不让他人侵犯我们的隐私,现在我们不妨用它来约束我们自己。
这就要解决一个问题:密码是自己设置的,怎么约束自己?
问得好,既然密码由自己控制,那就不能控制自己,除非你有失忆术,设完密码的一瞬间忘记它,这也有个问题——那不是永远也打不开它了?所以,我们不能让自己控制密码,而是计算机。
计算机上的任何软件都没有自动生成密码并控制它的功能——毕竟这不是密码诞生的目的。而自动设置密码这个过程不禁让人联想到AI控制人类等一系列离谱的东西,从这里我们可以理解到:密码并不能由计算机设置,只能由我们自己设置。
这就是这个思路最核心的地方所在了:设置并不等于控制,平时我们设置密码,最重要的一点是什么?没错,记住它。这是传统使用密码的前提,设置并记住才等于控制。如果我们不让自己控制密码,那就要让密码由计算机记住,而我们不能记住它。
什么样的东西计算机能记住,而我们短时间内记不住它呢?
看看这些东西吧:LlwYZ39LYZ
cy1FkVRBS8
ml6AgIqt9
ZeBDpjXrIM
Jmls2I7pDT
只要你没有意识去记忆它,基本是不可能短时间记下来的。如果你说:我这最强大脑没办法啊,我看一眼就记住了啊,我都没想记住它。
那你能看一眼记住这个吗(doge)LJea5ezwTm8v7fs0lKj1bEnYdMstRKLA1KGpBAW4pSR1HA9yv2RP3Cl9Og9tKux9GJVJ8t8px0HfmGMOE1nvztaSJicqNyd7t5ONxKUlPGWJgBqOWU5bRi63ex7JMwix
而生成一串随机字符串可能是对于计算机来说最简单的事情之一了。只要我们让计算机生成一串复杂字符串,由我们复制粘贴去设置它(我们记不住它),然后计算机封存它,加以各种限制:比如最常见的时间限制。在你设置的截止时间之前,计算机不会告诉你这个密码,当时间一到,计算机就会自动把它呈现给你,这时你就可以访问这个加密的东西了。
我们还可以遐想一下(当然这我现在做不到,可能有人能做到),计算机可以给出其他限制,比如让你刷题,刷完相应的题目后计算机才会把这个密码呈现给你,作为一种奖励机制。这都是基于这个思路的延伸应用,大有可为了属于是。
我们可以用各种方式实现它,毕竟这是个思路。你甚至可以让别人而不是计算机控制这个密码,这是最简单的——你不用学任何编程,只需要一个理解你的好朋友或者好家长。当然,计算机的实现是更灵活自主的。
这篇文章不是实现的主题,如果后续时间允许,我会把它开源供大家使用。现在我只是先说一下python做这个的大致思路,其实非常简单,初学者也可以解决。
有这么几个功能是必须要实现的:
当然,看似做完了,我们依旧有很多方法破解它,我们要一一击破这些方法。
网络时间从网上爬下来,只要用fidder抓一个包,篡改一下返回数据就能破解。这个也很好解决。我的思路是:时间差校验。
本地获取一次本地时间,网络获取一次网络时间,sleep两秒再分别获取一次,就算出了本地的时间差和网络的时间差。如果没有经过抓包,这两个值应该相等或者只差个一秒左右,如果经过了抓包篡改,这两个值就会差得很多。
很多网络时间api是识别本地时区的,本地更改时区会导致网络获取的时间变化。所以只需要用time模块获取一下本地时区,看看是不是正常的时区就可以了。
这篇文章只是介绍实现方法,如果后续时间允许且有人需要的话,我会做好成品并开源供大家使用。