基于John Carmack密码详解
什么是John Carmack密码?
John Carmack密码,也称为“DooM3密码”,是由游戏开发者John Carmack在2004年所创造的密码。这种密码的特点在于:使用了MD5哈希加密算法,并且还有一些特殊的操作。
John Carmack密码的组成
John Carmack密码由以下几个部分组成:
- 一个固定的“seed”,即种子。
- 一个是MD5哈希值。
- 一个简单的运算,主要是整数除法和模运算。
John Carmack密码的详细过程
- 首先,输入需要加密的字符串,获得一个MD5哈希值。
- 将哈希值分为四等份,每份32位,共128位。
- 将其中任意两份相加,得到一个新的32位数。
- 使用这个新数对种子进行整数除法,得到一个商和余数。
- 将商和余数进行拼接,得到一个6位数。
- 对这个6位数进行模运算,得到一个0至9的数字。
- 将该数字连接到上一个步骤中拼接的结果中,使其变成7位数。
- 重复步骤4~7,使7位数变得相当长。
- 将上一个步骤中得到的数进行最后一次模运算,得到一个0至25的数字。
- 将数字转化为字母,得到加密后的结果。
John Carmack密码示例
示例1
考虑将“hello”字符串加密,假设种子为123456。
我们首先需要计算“hello”的MD5哈希值:
5d41402abc4b2a76b9719d911017c592
将这个哈希值分为四等份:
5d41402a
bc4b2a76
b9719d91
1017c592
对任意两份相加,得到新数:
5d41402abc4b2a76b9719d911017c592
+ +
b9719d911017c5925d41402abc4b2a76
+ +
1017c5925d41402abc4b2a76b9719d91
+ +
bc4b2a765d41402a1017c592b9719d91
我们使用种子123456对新数进行整数除法:
5d41402abc4b2a76b9719d911017c592
+ +
b9719d911017c5925d41402abc4b2a76
+ +
1017c5925d41402abc4b2a76b9719d91
+ +
bc4b2a765d41402a1017c592b9719d91
/ 123456
= 66582743160302832
64175153007267852
57615207159820918
76846141473304548
将商和余数进行拼接,得到6位数:
66582743160302832641751530072678525761520715982091876846141473304548
对这个6位数进行模运算,得到数字2。
将数字2连接到前一个结果中,得到7位数:
665827431603028326417515300726785257615207159820918768461414733045482
2
重复此步骤,得到加密后的结果:
6658274316030283264175153007267852576152071598209187684614147330454822
7
将数字转换为字母,得到最终结果:
bbadbba
所以,字符串“hello”经过John Carmack密码加密后得到的结果为“bbadbba”。
示例2
再考虑一个简单的例子,将字符串“abc”加密。
首先,对“abc”进行MD5哈希,得到:
900150983cd24fb0d6963f7d28e17f72
将哈希值分为四等份,得到:
90015098
3cd24fb0
d6963f7d
28e17f72
对任意两份相加,得到新数:
900150983cd24fb0d6963f7d28e17f72
+ +
3cd24fb028e17f7290015098d6963f7d
+ +
d6963f7d900150983cd24fb028e17f72
+ +
28e17f7290015098d6963f7dd6963f7d
使用种子654321进行整数除法,得到:
900150983cd24fb0d6963f7d28e17f72
+ +
3cd24fb028e17f7290015098d6963f7d
+ +
d6963f7d900150983cd24fb028e17f72
+ +
28e17f7290015098d6963f7dd6963f7d
/ 654321
= 137578816505297
137400959170426
276369287834146
345920829105210
将商和余数拼接,得到:
137578816505297137400959170426276369287834146345920829105210
对这个6位数进行模运算,得到数字3。
将数字3连接到上一步的结果中,得到:
1375788165052971374009591704262763692878341463459208291052103
重复此步骤,得到:
13757881650529713740095917042627636928783414634592082910521036
2
将数字转化为字母,得到最终结果:
sibsirs
因此,字符串“abc”经过John Carmack密码加密后得到的结果为“sibsirs”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于John Carmark密码详解 - Python技术站