基于John Carmark密码详解

基于John Carmack密码详解

什么是John Carmack密码?

John Carmack密码,也称为“DooM3密码”,是由游戏开发者John Carmack在2004年所创造的密码。这种密码的特点在于:使用了MD5哈希加密算法,并且还有一些特殊的操作。

John Carmack密码的组成

John Carmack密码由以下几个部分组成:

  • 一个固定的“seed”,即种子。
  • 一个是MD5哈希值。
  • 一个简单的运算,主要是整数除法和模运算。

John Carmack密码的详细过程

  1. 首先,输入需要加密的字符串,获得一个MD5哈希值。
  2. 将哈希值分为四等份,每份32位,共128位。
  3. 将其中任意两份相加,得到一个新的32位数。
  4. 使用这个新数对种子进行整数除法,得到一个商和余数。
  5. 将商和余数进行拼接,得到一个6位数。
  6. 对这个6位数进行模运算,得到一个0至9的数字。
  7. 将该数字连接到上一个步骤中拼接的结果中,使其变成7位数。
  8. 重复步骤4~7,使7位数变得相当长。
  9. 将上一个步骤中得到的数进行最后一次模运算,得到一个0至25的数字。
  10. 将数字转化为字母,得到加密后的结果。

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技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • 在C#中对TCP客户端的状态封装详解

    对TCP客户端的状态进行封装,可以提高代码的可维护性和可读性,方便后期的代码扩展和优化。在C#中,可以使用枚举类型和委托来实现对TCP客户端的状态封装。 1、枚举类型实现TCP客户端状态封装 使用枚举类型可以定义TCP客户端的连接状态、发送状态、接收状态等,用于标识TCP客户端当前所处的状态,同时可用于状态转换的判断。示例代码如下: public enum …

    C# 2023年5月15日
    00
  • 武装你的WEBAPI-OData与DTO

    本文属于OData系列文章 Intro 前面写了很多有关OData使用的文章,很多读者会有疑问,直接将实体对象暴露给最终用户会不会有风险?$expand在默认配置的情况下,数据会不会有泄露风险? 答案是肯定的,由于OData的特性,提供给我们便捷同时也会带来一些风险。很多地方推荐使用DTO模式来隔离实体类与最终用户使用到类的关系,从而解决以上两个问题,ODa…

    C# 2023年5月8日
    00
  • Spring.Net IOC依赖注入原理流程解析

    下面是对于“Spring.Net IOC依赖注入原理流程解析”的详细讲解: 1. 什么是IOC? IOC 全称是 Inversion of Control,即控制反转。 意思是将原本由程序员编码决定的对象间调用关系,通过外部配置文件描述,交由 Spring.Net 框架来管理和实现。 Spring.Net 提供的 IOC 叫做 Dependency Inje…

    C# 2023年6月3日
    00
  • asp.net错误处理Application_Error事件示例

    ASP.NET应用程序中的Application_Error事件是用于处理未处理异常的应用程序级别错误的事件。这个事件允许我们将应用程序的控制流引导到自定义错误处理逻辑。下面是完整的“asp.net错误处理Application_Error事件示例”的攻略。 1. 创建Global.asax文件 首先,需要在应用程序的根目录下创建一个名为“Global.as…

    C# 2023年6月6日
    00
  • C#控制台程序使用Log4net日志组件详解

    C#控制台程序使用Log4net日志组件详解 Log4net是一个用于记录日志的流行的开源框架,它可以帮助开发者方便地记录应用程序的运行日志,并且支持在运行时动态地控制日志等级和输出目标。本篇攻略将从以下几个方面详细讲解如何在C#控制台程序中使用Log4net日志组件: 安装Log4net并添加配置文件 创建Logger对象 记录日志信息 控制日志等级和输出…

    C# 2023年5月15日
    00
  • 图文介绍c#封装方法

    图文介绍c#封装方法 在c#编程中,封装是面向对象编程中一个非常重要的概念,它允许我们将数据和方法包装到一起,并限制对其的访问。在本文中,我们将介绍如何在c#中封装方法,并提供两个示例以说明如何使用封装方法。 什么是封装 封装指的是将数据和方法包装到一起,以隐藏其具体实现细节,并限制对其的直接访问。在c#中,我们使用访问修饰符来控制对数据和方法的访问级别。包…

    C# 2023年6月3日
    00
  • c#互斥锁Mutex类用法介绍

    c#互斥锁Mutex类用法介绍 什么是互斥锁? 在多线程编程中,为了防止多个线程同时访问共享资源导致数据混乱的问题,需要用到互斥锁。互斥锁是一种同步方式,它保证在同一时间只有一个线程可以访问共享资源。 Mutex类的用法 在C#中,可以通过Mutex类实现互斥锁。使用Mutex类的步骤如下: 创建一个Mutex对象,可以通过Mutex类的构造函数来创建: M…

    C# 2023年5月15日
    00
  • C#备忘录模式(Memento Pattern)实例教程

    C#备忘录模式(Memento Pattern)实例教程 备忘录模式(Memento Pattern)是一种行为型设计模式,它允许将一个对象的内部状态保存到一个外部的备忘录对象中,从而可以在需要时将对象恢复到先前的状态。在本篇教程中,我们将介绍C#中备忘录模式的使用方法和实现步骤,并提供两个示例说明。 示例一:备忘录模式的基本使用 步骤一:创建备忘录类 首先…

    C# 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部