Update 20200611 Never forget your password with this Python encryption algorithm.md

This commit is contained in:
SilentDawn 2020-07-27 23:03:08 +08:00 committed by GitHub
parent 459b8cb091
commit 6756a1cebf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -44,9 +44,9 @@ def int_from_bytes(s):
secret = int_from_bytes("terrible secret".encode("utf-8"))
```
大到他自己的孩子都不能轻易信任。他有五个王子,但任然危机重重。他的孩子需要在他百年之后用这个秘密来保卫国家,而国王又不能忍受自己的孩子在还记得自己的时候就知道这些秘密,尤其是这种状态可能要持续几十年。
大到他自己的孩子都不能轻易信任。他有五个王子,但前程危机重重。他的孩子需要在他百年之后用这个秘密来保卫国家,而国王又不能忍受自己的孩子在他们还记得自己的时候就知道这些秘密,尤其是这种状态可能要持续几十年。
所以,国王使用了大力魔术,将这个秘密分为了五个部分,因为他知道,可能有一两个孩子不会遵从他的遗嘱,但绝对不会出现三个
所以,国王动用大力魔术,将这个秘密分为了五个部分。他知道,可能有一两个孩子不会遵从他的遗嘱,但绝对不会同时有三个或三个以上这样
```
@ -54,7 +54,7 @@ from mod import Mod
from os import urandom
```
国王精通 [有限域][8] 和 _随机理论_,当然,对他来说,使用 Python 分割这个秘密是小菜一碟。
国王精通 [有限域][8] 和 _随机理论_,当然,对他来说,使用 Python 分割这个秘密是小菜一碟。
第一步是选择一个大质数——第 13 个 [梅森质数][9] (`2**521 - 1`),他让人把这个数誊写到纸上,封之金匮,藏之后殿:
@ -65,7 +65,7 @@ from os import urandom
但这不是要保守的秘密:这只是 _公钥_
国王知道,如果 `P` 是一个质数, 用 `P` 对数字取模,就形成了一个数学 [场][10]:在场中可以自由进行加、减、乘、除运算当然,做除法运算时,除数不能为 0。
国王知道,如果 `P` 是一个质数, 用 `P` 对数字取模,就形成了一个数学 [场][10]:在场中可以自由进行加、减、乘、除运算当然,做除法运算时,除数不能为 0。
国王日理万机,方便起见,他在做模运算时使用了 PyPI 中的 [`mod`][11] 模块,这个模块实现了各种模运算算法。
@ -129,7 +129,7 @@ del shards[2]
del shards[3]
```
二十年弹指一挥间,奉先王命,三个孩子将合力恢复出先王的大秘密。他们将各自的秘密片段拼合在一起:
二十年弹指一挥间,奉先王命,三个孩子将合力恢复出先王的大秘密。他们将各自的秘密片段拼合在一起:
```
@ -138,7 +138,7 @@ del shards[3]
然后是 40 天没日没夜的苦干。这是个大工程,他们虽然都懂些 Python但都不如前国王精通。
最终,揭示结果的时刻到了。
最终,揭示秘密的时刻到了。
用于反算秘密的代码基于 [拉格朗日差值][13],它利用多项式在 `n` 个非 0 位置的值,来计算其在 `0` 处的值。前面的 `n` 指的是多项式的阶数。这个过程的原理是,可以为一个多项式找到一个显示方程,使其满足:其在 `t[0]` 处的值是 `1`,在 `i` 不为 `0` 的时候,其在 `t[i]` 处的值是 `0`。因多项式值的计算属于线性运算,需要计算 _这些_ 多项式各自的值,并使用多项式的值进行插值:
@ -173,7 +173,7 @@ def retrieve_original(secrets):
`retrieved_secret == secret`[/code] [code]`TRUE`
```
数学这个魔术的优美之处就在于它每一次都是那么靠谱,无一例外。国王的孩子们,曾经的孩童,而今已是壮年,足以理解父皇的初衷,并以先辈的锦囊妙计保卫了国家,并得以繁荣昌盛!
数学这个魔术的优美之处就在于它每一次都是那么靠谱,无一例外。国王的孩子们,曾经的孩童,而今已是壮年,足以理解先王的初衷,并以先王的锦囊妙计保卫了国家,并继之以繁荣昌盛!
### 关于 Shamir 秘密共享算法的现代故事