c语言中char的-128是怎么计算的


计算机里面是用补码表示的...

10000000求原码的操作是:符号位为1,其余各位取反,然后再加1。 
所以,10000000取反后就是11111111,把符号位去了就是01111111再加1就是10000000就是-128了。

可以说是因为10000000+1=10000001(-128+1=-127)嘛...


0x80可以表示为负数0,也可以表示为0x81减去1。
由于0的正负值相等,没有必要还来个负数0,因此,也就把0x80的意义规定为0x81减去1。而0x81为-127的补码,那么0x80就为-128的补码了。

AES-128 CMAC(Cipher Mode with Additional Authentication Code)是一种基于AES(高级加密标准)的消息认证码计算方法,用于验证数据的完整性和来源。在C语言中实现AES-128 CMAC需要以下步骤: 1. **准备库**:首先确保你已经包含了相应的AES加密库,如OpenSSL、Crypto++或自定义的AES模块。 ```c #include <openssl/aes.h> ``` 2. **生成随机初始化向量(IV)**:CMAC使用一个特定的IV,通常是在加密过程中生成并保密的。 3. **设置CMAC函数**:AES-CMAC的计算过程涉及到对AES进行两次操作:一次作为加密,一次作为解密(反向模式)。你需要创建一个`AES_KEY`结构并将其配置为AES-128。 4. **计算CMAC**:定义一个函数,输入数据块、长度以及预设的密钥和IV。使用AES_ECB_encrypt函数(ECB模式下)和AES_decrypt函数来完成计算。 ```c void cmac(const unsigned char *key, const unsigned char *iv, const unsigned char *data, size_t data_len, unsigned char mac[AES_BLOCK_SIZE]) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); // 使用128位密钥 unsigned char input[AES_BLOCK_SIZE + data_len]; memcpy(input, iv, AES_BLOCK_SIZE); memcpy(&input[AES_BLOCK_SIZE], data, data_len); AES_cmac_encrypt(input, mac, &aes_key, NULL, AES_ENCRYPT); // 第一轮加密 AES_cmac_encrypt(mac, mac, &aes_key, NULL, AES_DECRYPT); // 第二轮解密 } ``` 5. **验证**:接收一个MAC和一组数据,再次使用相同的密钥和IV通过上述函数计算MAC,然后比较两者是否一致。 注意:这个例子是一个简化的版本,实际应用中需要考虑错误处理、数据分块和填充等问题,并且一些库可能会提供专门的API来进行更高效和安全的CMAC计算
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值