用XOR乘字节

时间:2018-09-17 18:33:17

标签: c++ aes

因此,在我提出问题之前。我尝试搜索此词,但我可能措词不正确,以获得任何有效结果。因此,目的是在AES 128位加密程序中使用。

我需要将一个无符号字符(将是十六进制值)乘以2或3,这将是一个XOR操作。所以基本上,有没有一种方法可以像这样不输入内容。

(SBOX[0] ^ SBOX[0]) ^ SBOX[0]

如果我必须这样做,那么每一行都将相当长,但是我相信可以做到。如果有一个接线员只说3 ^ SBOX[0],那就太好了。

1 个答案:

答案 0 :(得分:2)

如果您正在执行AES,那么您将在Galois Field(特别是GF(2 8 ))中进行算术运算。因此,您不再习惯用于标准整数的规则。

尤其是,加法异或(在GF(2 n 中)),乘法不是重复加法。您的示例说明了为什么-乘以2总是async foo(req, res, next) { try { await scan(req.params.stack); res.send('ok'); } catch (err) { res.status(500).send('fail'); } } async scan(stack) { try { const libs = [1,2,3]; // This libs.map functions return promise. then why not use await? const promises = await libs.map(async l => analyze(stack, l); // Again q.allSettled returns promise, use await here too let results = await q.allSettled(promises); const rejected = results.filter(r => r.state === 'rejected'); if (rejected.length === results.length) throw new Error('Failed'); return results; } // If any promise call reject function will be in catch catch (err) { throw new Error(err); } } async function analyze(stack, libraries) { try { const config = await buildConfiguration(stack, libraries); return await databaseInsertion(vulnsObject); } catch (err) { console.log(err); return null; } }

(在代码中)实际的步骤取决于Galois字段的约简多项式(无论如何,推导它们超出了我今天的能力范围)。但是,它们在网络上的多个位置都有汇总。在许多情况下,这些说明专门针对S-box MixColumns操作,例如Wikipedia