4个版本
0.2.1 | 2024年1月24日 |
---|---|
0.2.0 | 2024年1月24日 |
0.1.1 | 2024年1月24日 |
0.1.0 | 2024年1月24日 |
#370 在 加密学
用于 wardenx-core
300KB
1K SLoC
df1t-cyph
仅仅是一个不遵循加密标准的简单Rust加密算法。其名称的字面意思为 这是啥密文!
注意:此项目仅为实验目的,强烈不建议将其视为严肃的加密解决方案。
这个玩意是如何工作的?
和其他加密算法一样,它接受一个字符串和一个最大16字符的盐作为参数。
这是df1t-cyph的beta版本,存在一些限制
- 准确性尚未测试,这意味着您可能会得到不一致的结果。
- df1t-encrypt只接受字母(大小写)和固定数字。
加密
df1t-encrypt
函数通过6个阶段生成最终结果
- 输入解析
- 第一级映射
- 混合和切换
- 数学转换
- 数据交换 第二级映射
- 结果排列
输入解析
在这个阶段,函数将尝试将传入的参数解析为长度相同的连续向量。
参数扩展
首先,比较两个参数的长度,较短的将自身扩展,直到满足较长的参数长度。
例如,以 "superpassword"
作为密码和 "somesalt"
作为盐。显然,盐比密码短5个字符。扩展后,它应该看起来像这样: "somesaltsomes"
。
如果两个参数长度相同,则此步骤将被跳过。
向量转换
简单地说,两个参数将被分割成向量
第一级映射
在这里,函数将运行迭代过程,遍历内部库中的数组,这些数组代表每个字符及其映射的等效字符,并将结果返回为新向量。
相同的过程将应用于盐向量,但使用不同的等效字符以获得独特的映射。
混合和切换
获得盐和密码的映射版本后,大致如下所示
切换函数将这两个参数作为参数,并根据以下标准进行混合
- 如果元素(盐和密码)的第一个字符不相等,则取盐字符。
- 如果元素的第二个字符不相等,则取密码字符。
- 如果两个字符相等,则交换它们。
- 如果两个字符相等,则第二对不忽略。
以下是可视化解释。
数学变换
数值变换
在这个级别,混合向量的元素将被拆分以获得单个字符元素向量,例如。
["d","S","n","U","n","P","E","E"]
因此,另一轮迭代将在之前的lib上运行以获取等效的mx_as数字。
迭代结果应该如下所示
[145, 654, 879, 147, 963, 123, 412]
矩阵表示
在这里,该函数将向量转换为n*n矩阵。首先,它通过找到最后一个向量的平方根来计算矩阵的n,然后检查n*n实际上是否等于向量长度,如果不是,则将n加1。
按照此路径会导致获取额外的空元素,因为它只有28个元素来填充一个36的矩阵。因此,空元素将被填充为101
向量变换
矩阵根据以下表示被拆分为三个主要向量
之后,矩阵长度将添加到三个向量的每个元素中
数据交换(第二级映射)
在我们使用第一个映射级别的固定参考时,现在我们将使用ceaser substitution通过一组约70个不同的字符作为参考,使其变得更具动态性。
ceaser交换如下
- 对于绿色向量,向右移动绿色向量长度 + 2
- 对于红色向量,向右移动红色向量长度
- 对于蓝色向量,向右移动蓝色向量长度 + 红色向量长度 + 1
最后,每个向量将连接成一个字符串。
结果排列
该函数将结果连接成一个单个字符串。 原始密码长度 + 绿色向量 + 红色向量 + 蓝色向量
- 原始密码长度通过相同的ceaser交换过程进行移动,移动距离为142。然而,长度将需要在解密阶段使用。
对于连接,函数将在每个元素之间添加$,以便使其可解析用于解密。