icv*_*cvg 5 mysql string bit-manipulation xor
我想用 KEY 对字符串(实际上是它的二进制表示形式)进行按位异或。
运算结果应以十六进制表示。
我所拥有的: 'a' - 要更改的 UTF-8 字符串。'ACF123456' - 十六进制密钥。
结果显示为 BIGINT:
select CONV(HEX('a'), 16, 10) ^ CONV('ACF123456', 16, 10);
Run Code Online (Sandbox Code Playgroud)
结果显示为十六进制:
select CONV( CONV(HEX('a'), 16, 10) ^ CONV('ACF123456', 16, 10), 10, 16);
Run Code Online (Sandbox Code Playgroud)
问题:
谢谢。
你的转换对我来说看起来很好。\n正如你所指出的,两者CONV()和^都有 64 位精度。
2^64 = 16^16,因此超过 16 个十六进制数字的字符串应该转换为大于 2^64 的整数。然而,当尝试将这些字符串转换为整数时,这些字符串将被残酷地(无声地)从左侧截断。
\n\n我的解决方案的要点是对这些字符串进行切片。显然,结果可能不会显示为整数,而只能显示为字符串表示形式。
\n\n让 @input 成为您的“要更改的字符串”,并且 @key,是您的“密钥”。
HEX(@input)给@hex_input。从那时起这里就没有问题了HEX()可以使用字符串。@hex_input从右侧开始@key16 位长的字符串。X-OR每个 64 位切片@hex_input与 的每个 64 位切片的。@key使用CONV(@slice, 16, 10)。如果 或@hex_input的@key切片数少于另一个字符串,则X-OR另一个字符串的剩余切片为 0。X-OR回十六进制字符串:UNHEX()。三列表TEMPORARY可以用作数组来存储@hex_input,@mask生成的切片。
将所有这些放在一个存储过程中,然后voil\xc3\xa0!
\n\n听起来你对MySQL有一些技能,你应该能够将上面的内容翻译成真正的代码。但如果您需要进一步的指导,我将很乐意提供帮助。
\n| 归档时间: |
|
| 查看次数: |
2498 次 |
| 最近记录: |