[英]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.