当前位置: 首页 > news >正文

免费注册域名网站推荐成都网站seo费用

免费注册域名网站推荐,成都网站seo费用,godaddy wordpress托管,广州做包包的网站好加解密 | AES加、解密学习 你的代码实现了一个简单的AES(高级加密标准)加密和解密的测试程序。以下是对代码的分析和一些改进建议: 代码功能 初始化数据和密钥: 定义了一个16字节的输入数据 input_data。定义了一个16字节的AES…

加解密 | AES加、解密学习

你的代码实现了一个简单的AES(高级加密标准)加密和解密的测试程序。以下是对代码的分析和一些改进建议:

代码功能

  1. 初始化数据和密钥
    • 定义了一个16字节的输入数据 input_data
    • 定义了一个16字节的AES密钥 key
    • 初始化了加密数据和解密数据的缓冲区。
  2. 密钥扩展
    • 使用 aes_expand_key 函数将原始密钥扩展为扩展密钥。
  3. 加密和解密
    • 使用 aes_encrypt 函数对输入数据进行加密。
    • 使用 aes_decrypt 函数对加密后的数据进行解密。
  4. 打印信息
    • 打印了加密前后的数据、密钥等信息。

代码中的问题和改进建议

  1. 使用字符串作为密钥
    • 在C语言中,字符串以空字符 \0 结尾。因此,"1234567890abcdef" 实际上是一个17字节的字符串(包括空字符)。这可能导致密钥长度不正确。
    • 改进建议:使用字节数组定义密钥,确保密钥长度为16字节。
  2. 加密和解密函数的参数类型
    • aes_encryptaes_decrypt 函数的参数类型需要明确。确保它们接受的是字节数组,并且长度正确。
    • 如果这些函数的实现需要16字节对齐的输入,需要确保输入数据的长度为16的倍数。
  3. 解密硬编码的十六进制字符串
    • 在代码中,你尝试直接将十六进制字符串 "8df9deff39e5877acf18f8056538864c" 传递给 aes_decrypt 函数。这在C语言中是不正确的,因为字符串是字符数组,而不是字节数组。
    • 改进建议:将十六进制字符串转换为字节数组后再进行解密。
  4. 打印加密后的数据
    • 加密后的数据是二进制数据,可能包含不可打印字符。因此,使用十六进制格式打印是正确的,但需要确保解密后的数据也是正确处理的。

改进后的代码

以下是改进后的代码示例:

c复制

#include <stdio.h>
#include <string.h>
#include <stdint.h>#define AES_KEY_LENGTH 16
#define AES_EXPAND_KEY_LENGTH 176 // AES-128 扩展密钥长度typedef uint8_t u8;// 假设的 AES 加密和解密函数
void aes_expand_key(const u8* key, u8* expanded_key);
void aes_encrypt(const u8* input, const u8* expanded_key, u8* output);
void aes_decrypt(const u8* input, const u8* expanded_key, u8* output);int tester_aes() {// 输入数据,必须是 16 字节的倍数u8 input_data[16] = "Hello, AES!";u8 encrypted_data[16];u8 decrypted_data[16];// AES 密钥 (128 位)u8 key[AES_KEY_LENGTH] = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef, 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10};u8 expanded_key[AES_EXPAND_KEY_LENGTH];int i = 0;aes_expand_key(key, expanded_key);memset(encrypted_data, 0, sizeof(encrypted_data));memset(decrypted_data, 0, sizeof(decrypted_data));printf("sizeof(unsigned char): %ld\n", sizeof(unsigned char));printf("sizeof(unsigned int) : %ld\n", sizeof(unsigned int));printf("密钥:");for (i = 0; i < AES_KEY_LENGTH; i++) {printf("%02x", key[i]);}printf("\n");printf("原始数据: ");for (i = 0; i < 16; i++) {printf("%02x", input_data[i]);}printf("\n");// 加密aes_encrypt(input_data, expanded_key, encrypted_data);printf("加密后的数据: ");for (i = 0; i < 16; i++) {printf("%02x", encrypted_data[i]);}printf("\n");// 解密aes_decrypt(encrypted_data, expanded_key, decrypted_data);printf("解密后的数据: ");for (i = 0; i < 16; i++) {printf("%02x", decrypted_data[i]);}printf("\n");// 解密硬编码的十六进制字符串u8 hex_data[16] = {0x8d, 0xf9, 0xde, 0xff, 0x39, 0xe5, 0x87, 0x7a, 0xcf, 0x18, 0xf8, 0x05, 0x65, 0x38, 0x86, 0x4c};aes_decrypt(hex_data, expanded_key, decrypted_data);printf("解密后的数据1: ");for (i = 0; i < 16; i++) {printf("%02x", decrypted_data[i]);}printf("\n");return 0;
}

改进点说明

  1. 密钥定义
    • 使用字节数组定义密钥,确保密钥长度为16字节。
  2. 十六进制字符串转换
    • 将硬编码的十六进制字符串转换为字节数组,避免直接传递字符串。
  3. 打印数据
    • 使用十六进制格式打印所有数据,确保输出一致且易于理解。

注意事项

  • 确保 aes_expand_keyaes_encryptaes_decrypt 函数的实现是正确的,并且它们的参数类型和长度符合要求。
  • 如果需要处理更长的输入数据,需要分块处理,因为AES加密要求输入数据长度为16字节的倍数。
  • 在实际应用中,密钥和数据应通过安全的方式传递和存储,避免硬编码在代码中。
http://www.hkea.cn/news/680649/

相关文章:

  • 常州天启建设公司网站高端快速建站
  • ppt模板免费下载网站不用登录seo测试工具
  • 四川建设人才网官网查询阜新网站seo
  • 太原网站开发定制百度网盘官网下载
  • 业主装修日记那个网站做的好片多多可以免费看电视剧吗
  • 租车网站建设站长之家源码
  • 昌吉州回族自治州建设局网站地产渠道12种拓客方式
  • 北京市网站公司网络项目免费的资源网
  • 电子商务网站规划、电子商务网站建设站长工具 忘忧草
  • 凡科建网关键词优化公司哪家好
  • seo排名推广工具seo公司多少钱
  • 做视频网站赚钱怎么在百度上推广自己的公司信息
  • 网站建设凡科厦门网站建设平台
  • 互联网行业pest分析福州百度快速优化排名
  • 做网站的接私活犯法吗如何对网站进行推广
  • 身高差效果图网站优化师和运营区别
  • 谷歌wordpress建站搜索引擎算法
  • .net 购物网站开发源代码发布信息的免费平台
  • 自己做一网站大学生网络营销策划书
  • 关于网站建设的文章百度域名收录提交入口
  • 国人在线做网站推广图片大全
  • 郑州网站建设七彩科技四年级说新闻2023
  • 在什么网站上做自媒体seo整站怎么优化
  • 网站开发要注意安全性公司优化是什么意思
  • 河北邢台做移动网站开通网站需要多少钱
  • 天河网站建设多少钱淘宝关键词优化
  • 中型网站 收益关键词排名查询官网
  • 网站的弹窗是怎么做的谈谈对seo的理解
  • 广州网站制作费用宁波seo外包哪个品牌好
  • 河南高端网站建设广州网站优化页面