Console Library 8.0.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
console::crypto::aes_impl Namespace Reference

AES加密算法的内部实现细节。 More...

Functions

void sub_bytes (uint8_t *state)
 字节替换操作,使用S盒替换状态矩阵中的每个字节。
void inv_sub_bytes (uint8_t *state)
 逆字节替换操作,使用逆S盒替换状态矩阵中的每个字节。
void shift_rows (uint8_t *state)
 行移位操作,将状态矩阵的各行循环左移不同偏移量。
void inv_shift_rows (uint8_t *state)
 逆行移位操作,将状态矩阵的各行循环右移不同偏移量。
uint8_t gmul (uint8_t a, uint8_t b)
 在GF(2^8)有限域中执行乘法运算。
void mix_columns (uint8_t *state)
 列混合操作,对状态矩阵的每一列进行线性变换。
void inv_mix_columns (uint8_t *state)
 逆列混合操作,对状态矩阵的每一列进行逆线性变换。
void add_round_key (uint8_t *state, const uint8_t *key)
 轮密钥加操作,将状态矩阵与轮密钥进行异或。
void key_expansion (const uint8_t *key, uint8_t *round_keys)
 AES密钥扩展算法,将原始密钥扩展为11轮使用的轮密钥。
void aes_encrypt_block (const uint8_t *input, uint8_t *output, const uint8_t *round_keys)
 AES加密单个块(128位)。
void aes_decrypt_block (const uint8_t *input, uint8_t *output, const uint8_t *round_keys)
 AES解密单个块(128位)。
std::string pad_key (const std::string &key)
 将密钥填充到16字节(AES-128要求的密钥长度)。
std::string random_bytes ()
 生成随机字节序列。

Variables

static constexpr uint8_t Sbox [256]
 AES算法的S盒,用于字节替换。
static constexpr uint8_t InvSbox [256]
 AES算法的逆S盒,用于解密时的字节替换。

Detailed Description

AES加密算法的内部实现细节。

实现了AES-128算法,使用CTR模式进行加密。

Note
该命名空间中的函数和常量仅供内部使用,不建议直接调用。

Function Documentation

◆ add_round_key()

void console::crypto::aes_impl::add_round_key ( uint8_t * state,
const uint8_t * key )
inline

轮密钥加操作,将状态矩阵与轮密钥进行异或。

Parameters
state16字节的状态矩阵。
key16字节的轮密钥。

◆ aes_decrypt_block()

void console::crypto::aes_impl::aes_decrypt_block ( const uint8_t * input,
uint8_t * output,
const uint8_t * round_keys )
inline

AES解密单个块(128位)。

Parameters
input输入的16字节密文块。
output输出的16字节明文块。
round_keys扩展后的轮密钥。

◆ aes_encrypt_block()

void console::crypto::aes_impl::aes_encrypt_block ( const uint8_t * input,
uint8_t * output,
const uint8_t * round_keys )
inline

AES加密单个块(128位)。

Parameters
input输入的16字节明文块。
output输出的16字节密文块。
round_keys扩展后的轮密钥。

◆ gmul()

uint8_t console::crypto::aes_impl::gmul ( uint8_t a,
uint8_t b )
inline

在GF(2^8)有限域中执行乘法运算。

Parameters
a乘数。
b乘数。
Returns
uint8_t 乘积结果。

◆ inv_mix_columns()

void console::crypto::aes_impl::inv_mix_columns ( uint8_t * state)
inline

逆列混合操作,对状态矩阵的每一列进行逆线性变换。

Parameters
state16字节的状态矩阵。

◆ inv_shift_rows()

void console::crypto::aes_impl::inv_shift_rows ( uint8_t * state)
inline

逆行移位操作,将状态矩阵的各行循环右移不同偏移量。

Parameters
state16字节的状态矩阵。

◆ inv_sub_bytes()

void console::crypto::aes_impl::inv_sub_bytes ( uint8_t * state)
inline

逆字节替换操作,使用逆S盒替换状态矩阵中的每个字节。

Parameters
state16字节的状态矩阵。

◆ key_expansion()

void console::crypto::aes_impl::key_expansion ( const uint8_t * key,
uint8_t * round_keys )
inline

AES密钥扩展算法,将原始密钥扩展为11轮使用的轮密钥。

Parameters
key原始密钥,长度为16字节。
round_keys输出缓冲区,用于存储扩展后的轮密钥,需要至少176字节。

◆ mix_columns()

void console::crypto::aes_impl::mix_columns ( uint8_t * state)
inline

列混合操作,对状态矩阵的每一列进行线性变换。

Parameters
state16字节的状态矩阵。

◆ pad_key()

std::string console::crypto::aes_impl::pad_key ( const std::string & key)
inline

将密钥填充到16字节(AES-128要求的密钥长度)。

Parameters
key原始密钥字符串。
Returns
std::string 填充后的16字节密钥,不足部分补零。
Warning
如果密钥长度超过16字节,多余部分将被截断。

◆ random_bytes()

std::string console::crypto::aes_impl::random_bytes ( )
inline

生成随机字节序列。

Returns
std::string 字节序列。
Note
尽可能确保了序列的随机。

◆ shift_rows()

void console::crypto::aes_impl::shift_rows ( uint8_t * state)
inline

行移位操作,将状态矩阵的各行循环左移不同偏移量。

Parameters
state16字节的状态矩阵。

◆ sub_bytes()

void console::crypto::aes_impl::sub_bytes ( uint8_t * state)
inline

字节替换操作,使用S盒替换状态矩阵中的每个字节。

Parameters
state16字节的状态矩阵。

Variable Documentation

◆ InvSbox

uint8_t console::crypto::aes_impl::InvSbox[256]
staticconstexpr

AES算法的逆S盒,用于解密时的字节替换。

◆ Sbox

uint8_t console::crypto::aes_impl::Sbox[256]
staticconstexpr

AES算法的S盒,用于字节替换。