基于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# File.ReadAllBytes – 读取文件的字节数组

    File.ReadAllBytes 方法是C#中的一个静态方法,用于读取指定文件的所有字节并将其存储为字节数组。该方法的使用方法可分为以下几个步骤: 引入System.IO命名空间 在使用该方法前需要先引入System.IO命名空间,因为该方法位于System.IO命名空间下。 using System.IO; 调用File.ReadAllBytes方法 在…

    C# 2023年4月19日
    00
  • .net实现微信公众账号接口开发实例代码

    下面是详细的攻略: 1. 背景介绍 微信公众账号接口开发实例代码是指开发者通过微信公众平台提供的接口,将自己的业务逻辑与微信公众平台的用户进行交互,从而实现业务推广、用户服务等功能的一套开发方案。在这一过程中,开发者需要使用到一些技术工具,比如C#语言、Visual Studio开发环境等。其中,.NET是指微软公司开发的一套开发框架,它可以让程序员使用多种…

    C# 2023年5月31日
    00
  • .NET之后台用户权限管理实现

    下面是“.NET之后台用户权限管理实现”的完整攻略。 1. 确认需求 在实现任何功能之前,我们需要明确需求。对于后台用户权限管理这个功能,我们需要确定以下几点: 用户分组:用户可以被分配到不同的组别,不同组别可以拥有不同的权限。 权限管理:针对不同的权限,我们需要确定哪些用户有权限访问哪些页面、哪些操作。 页面控制:对于没有权限访问的页面,需要实现跳转或者显…

    C# 2023年5月31日
    00
  • php通过淘宝API查询IP地址归属等信息

    下面是 “php通过淘宝API查询IP地址归属等信息”的完整攻略: 1. 获取淘宝API的AppKey 在使用淘宝API之前,我们需要先获得AppKey。具体步骤如下: 进入淘宝开放平台官网:https://open.taobao.com/ 点击“控制台”->“应用管理”->“创建应用”,按照提示进行填写并提交。 提交申请后,等待审核通过,审核通…

    C# 2023年6月1日
    00
  • C# 构造函数如何调用虚方法

    C# 的构造函数是用来初始化一个新对象的方法。而虚方法是在基类中声明,可在派生类中重写的方法。构造函数中调用虚方法可能会出现一些问题,因为构造函数的存在,意味着对象的未完成状态,它需要特别注意调用虚方法的顺序和可能的结果。下面我将详细讲解C# 构造函数如何调用虚方法的攻略。 1.如何在构造函数中调用虚方法 为了在构造函数中调用虚方法,我们需要按照以下步骤操作…

    C# 2023年6月6日
    00
  • C#实现平衡查找树

    C# 实现平衡查找树的完整攻略如下: 什么是平衡查找树 平衡查找树也称 AVL 树,是一种非常高效的数据结构,用于存储和查找有序的数据,平衡查找树的特点是保证了树的高度始终是 O(log n),这样可以在 O(log n) 时间内查找任何一个元素。平衡查找树常用于数据库索引、文件系统和网络路由器中等需要高效查找的场景。 平衡查找树的实现 平衡查找树的实现需要…

    C# 2023年6月8日
    00
  • C#实现的简单随机数产生器功能示例

    下面我将为您详细讲解如何实现C#的随机数产生器功能示例。 1. 什么是随机数 随机数是指在一定范围内的数字,由于没有特定的规律和模式,所以看起来就像是随机产生的数字。在程序设计中,随机数被广泛应用于生成随机数据,加密算法,游戏开发等领域。 2. C#实现随机数产生器 在C#中,产生随机数可以使用Random类。下面是一个简单的示例,演示了如何使用Random…

    C# 2023年6月7日
    00
  • C#实现对Json字符串处理实例

    下面我会详细讲解如何用C#实现对Json字符串处理的步骤以及示例。 环境搭建 首先,我们需要在本地电脑上安装一个C#的开发环境,例如Visual Studio,确保我们能够编写和调试C#代码。 然后,在我们的C#项目中添加一个Json.Net的引用,可以通过NuGet包管理器添加,也可以手动下载并安装。 对Json字符串的处理 有很多种方式可以在C#中对Js…

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