繁体   English   中英

创建一个可过滤、可逆和可解密的自定义密钥? Python

[英]Creating a custom key which is filterable, reversible and decryptable? In Python

我的任务是创建自定义密钥或数字签名。 该键将从记录的属性创建。 我表中的每条记录都对应一个自定义键,每个自定义键都将由该记录的某些属性组成。 此键的目的是跟踪更改,并比较键以查看异同。

比如01|11|00|10 --> 每2位代表一个特定的值和属性。 在这个键中有 4 个属性,因此每 4 个属性有 4 个值。

我的解决方案是创建一个 switch 语句或类似的语句并手动定义属性和值。 但我很确定有比这更好和最优的解决方案,比如使用位或十六进制来表示每个属性。 感谢您的帮助,谢谢。

有 4*4*4*4 (256) 种可能的组合。 您可以将密钥视为 8 位字节。 考虑一下,给定 8 位:

7 6 5 4 3 2 1 0
--- --- --- ---
 |   |   |   |
 |   |   |   attribute1
 |   |   attribute2
 |   attribute3
 attribute4

每个属性可以有四个值。 要将这四个属性值打包到一个字节中,您可以编写:

key = (attr4 << 6) | (attr3 << 4) | (attr2 << 2) | attr1;

<<运算符进行“左移”,将数量中的位向左移动。 所以,假设你有:

attr4 = 3  // 11
attr3 = 2  // 10
attr2 = 3  // 11
attr1 = 1  // 01

首先,我们计算(attr4 << 6) 这给了我们11000000 也就是说,我们从00000011开始并将位左移六次。

然后(attr3 << 4)给我们00100000 (attr2 << 2)产生00001100 然后,我们将它们与按位或运算符结合起来:

11000000 | 00100000 | 00001100 | 00000001

或者这样看可能更容易:

11000000
00100000
00001100
00000001
--------
11101101 -- Key

按位或的结果是在任何 position 中的任何值中包含1的情况下放入1

为了扭转它,你写:

attr1 = (key & 3);
attr2 = (key >> 2) & 3;
attr3 = (key >> 4) & 3;
attr4 = (key >> 6) & 3;

反转它是将您感兴趣的位移动到前两个位置(位 0 和 1),然后用按位 AND 将它们屏蔽掉。 例如,给定键值11101101 ,您想提取attr3 所以你将它右移 4 个位置以产生00001110 attr3的位在前两个位置, attr4的位在接下来的两个位置。 然后,通过对 3 执行按位 AND 来屏蔽它:

00001101 & 00000011

如果两个值在该位 position 中都包含 1,则与值的结果为 1。因此 position 0 在两个值中都为 1。 Position 2 在属性中有一个 0。 所以结果是01

顺便说一句,这不是加密,而是编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM