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

dedecms 网站迁移上海房价2022年最新房价

dedecms 网站迁移,上海房价2022年最新房价,如何布置网站,wordpress 发文章本文章通过对一个unsigned char*类型的数据做简单的加解密操作来学习如何使用openssl库函数。 openssl为3.0.0#xff0c;对此前版本的很多函数都不兼容。 加解密源码 #include openssl/evp.h #include openssl/err.h #include string.h #include …本文章通过对一个unsigned char*类型的数据做简单的加解密操作来学习如何使用openssl库函数。 openssl为3.0.0对此前版本的很多函数都不兼容。 加解密源码 #include openssl/evp.h #include openssl/err.h #include string.h #include openssl/rand.h #include openssl/aes.h #include stdlib.hvoid handleErrors(void) {ERR_print_errors_fp(stderr);abort(); }int main() {ERR_load_crypto_strings();OpenSSL_add_all_algorithms();// 密钥和初始化向量unsigned char key[AES_BLOCK_SIZE];unsigned char iv[AES_BLOCK_SIZE];// 随机生成密钥和初始化向量RAND_bytes(key, sizeof(key));RAND_bytes(iv, sizeof(iv));// 要加密的数据unsigned char plaintext[] The quick brown fox jumps over the lazy dog;// 加密后的数据unsigned char ciphertext[sizeof(plaintext)];// 解密后的数据unsigned char decryptedtext[sizeof(plaintext)];// 创建并初始化加解密上下文EVP_CIPHER_CTX *ctx;int len;// 初始化加密上下文if (!(ctx EVP_CIPHER_CTX_new())) handleErrors();// 初始化加密操作if (1 ! EVP_EncryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv)) handleErrors();// 执行加密操作if (1 ! EVP_EncryptUpdate(ctx, ciphertext, len, plaintext, sizeof(plaintext))) handleErrors();EVP_EncryptFinal_ex(ctx, ciphertext len, len);// 清理加密上下文EVP_CIPHER_CTX_free(ctx);// 初始化解密上下文if (!(ctx EVP_CIPHER_CTX_new())) handleErrors();// 初始化解密操作if (1 ! EVP_DecryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv)) handleErrors();// 执行解密操作if (1 ! EVP_DecryptUpdate(ctx, decryptedtext, len, ciphertext, sizeof(ciphertext))) handleErrors();EVP_DecryptFinal_ex(ctx, decryptedtext len, len);// 清理解密上下文EVP_CIPHER_CTX_free(ctx);// 打印解密后的数据printf(Decrypted text: %s\n, decryptedtext);// 清理 OpenSSLERR_free_strings();return 0; }运行脚本 #!/bin/bash gcc aesctr.c -o aesctr -lcrypto ./aesctr输出的数据与加密前的数据一样当然这只是加密字符串可以如此简单但是如果数据是结构体呢 代码整体分析 这段代码是一个使用 OpenSSL 库进行 AES-128-CTR 模式加密和解密的 C 程序。下面是代码的详细解析 包含头文件 openssl/evp.h提供加密算法的封装。openssl/err.h提供错误处理功能。openssl/rand.h提供随机数生成功能。openssl/aes.h提供 AES 加密算法的函数。stdlib.h提供标准库函数如 abort()。 错误处理函数 handleErrors当遇到错误时打印错误信息并终止程序。 主函数 main ERR_load_crypto_strings加载错误字符串以便 ERR_print_errors_fp 函数可以打印出可读的错误信息。OpenSSL_add_all_algorithms注册所有 OpenSSL 加密算法。 密钥和初始化向量 unsigned char key[AES_BLOCK_SIZE]定义一个 128 位16 字节的密钥数组。unsigned char iv[AES_BLOCK_SIZE]定义一个 128 位16 字节的初始化向量IV数组。 生成密钥和 IV RAND_bytes(key, sizeof(key))生成随机密钥。RAND_bytes(iv, sizeof(iv))生成随机 IV。 定义数据 unsigned char plaintext[]定义要加密的明文数据。unsigned char ciphertext[sizeof(plaintext)]定义存储加密后数据的数组。unsigned char decryptedtext[sizeof(plaintext)]定义存储解密后数据的数组。 加密和解密上下文 EVP_CIPHER_CTX *ctx定义一个加密上下文指针用于存储加密和解密过程中的状态信息。 加密过程 EVP_CIPHER_CTX_new创建一个新的加密上下文。EVP_EncryptInit_ex初始化加密操作设置加密算法为 AES-128-CTR使用密钥和 IV。EVP_EncryptUpdate执行加密操作将明文数据加密到 ciphertext 数组中。EVP_EncryptFinal_ex完成加密操作处理任何剩余的数据。 解密过程 与加密过程类似但使用 EVP_DecryptInit_ex、EVP_DecryptUpdate 和 EVP_DecryptFinal_ex 函数进行解密。 打印解密后的数据 printf打印解密后的文本。 清理 OpenSSL ERR_free_strings释放加载的错误字符串。 返回 return 0程序正常退出。 这个程序演示了如何使用 OpenSSL 库进行 AES-128-CTR 模式的加密和解密。它首先生成随机的密钥和 IV然后使用这些密钥和 IV 对明文数据进行加密最后使用相同的密钥和 IV 对密文数据进行解密以验证加密和解密过程的正确性。 EVP_CIPHER_CTX_new()初始化加密上下文 EVP_CIPHER_CTX_new 是 OpenSSL 库中的一个函数用于创建一个新的加密上下文EVP_CIPHER_CTX。这个上下文用于存储加密或解密操作的状态包括算法特定的信息、密钥、初始化向量IV、加密模式等。 函数原型如下 EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void);这个函数不接受任何参数并返回一个指向新创建的 EVP_CIPHER_CTX 结构的指针。如果内存分配失败将返回 NULL。 EVP_EncryptInit_ex加密初始化 EVP_EncryptInit_ex 是 OpenSSL 库中的一个函数用于初始化加密操作。这个函数是加密过程中的第一步它准备加密上下文EVP_CIPHER_CTX以便后续的加密操作。这个函数非常灵活可以用于多种不同的加密算法和模式。 函数原型如下 int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv);参数说明 ctx指向 EVP_CIPHER_CTX 结构的指针这个结构用于存储加密过程中的状态信息。cipher指向 EVP_CIPHER 结构的指针这个结构指定了要使用的加密算法和模式。impl指向 ENGINE 结构的指针用于指定加密操作可能使用的硬件加速引擎。如果为 NULL则使用默认的软件实现。key指向密钥的指针。密钥的长度和格式取决于所选的加密算法。iv指向初始化向量的指针。初始化向量用于某些加密模式如 CBC、CTR 等以确保即使相同的明文也不会产生相同的密文。如果加密模式不需要 IV这个参数可以为 NULL。 返回值 成功时返回 1。失败时返回 0并可通过 ERR_get_error 函数获取错误信息。 EVP_EncryptUpdate执行加密操作 EVP_EncryptUpdate 是 OpenSSL 库中的一个函数用于执行加密操作的中间步骤。这个函数用于处理要加密的数据块通常在初始化加密操作使用 EVP_EncryptInit_ex之后和完成加密操作使用 EVP_EncryptFinal_ex之前调用。 函数原型如下 int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl);参数说明 ctx指向之前通过 EVP_EncryptInit_ex 初始化的 EVP_CIPHER_CTX 结构的指针。out指向用于存储加密数据的缓冲区的指针。加密的数据将被写入这个缓冲区。outl一个整数指针用于在输入时指定 out 缓冲区的大小并在输出时存储实际写入 out 缓冲区的数据大小。in指向要加密的数据的指针。inl指定 in 指向的数据的大小以字节为单位。 返回值 成功时返回 1。失败时返回 0并可通过 ERR_get_error 函数获取错误信息。 EVP_EncryptFinal_ex完成剩余加密操作 EVP_EncryptFinal_ex 是 OpenSSL 库中的一个函数它用于完成加密操作。在调用 EVP_EncryptUpdate 处理完所有要加密的数据后你会调用这个函数来完成加密过程它会处理任何剩余的数据块并确保加密过程正确结束。 函数原型如下 int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);参数说明 ctx指向之前通过 EVP_EncryptInit_ex 和 EVP_EncryptUpdate 进行初始化和更新的 EVP_CIPHER_CTX 结构的指针。out指向用于存储最后一部分加密数据的缓冲区的指针。如果加密算法在最后需要填充如块加密模式填充的数据也会被写入这个缓冲区。outl一个整数指针用于在输入时指定 out 缓冲区的大小并在输出时存储实际写入 out 缓冲区的数据大小。 返回值 成功时返回 1。失败时返回 0并可通过 ERR_get_error 函数获取错误信息。 EVP_CIPHER_CTX_free释放初始化上下文 EVP_CIPHER_CTX_free 是 OpenSSL 库中的一个函数用于释放之前通过 EVP_CIPHER_CTX_new 创建的加密上下文EVP_CIPHER_CTX所占用的内存资源。这个函数是管理 OpenSSL 加密操作中内存使用的重要部分确保在完成加密或解密操作后及时释放分配的内存避免内存泄漏。 函数原型如下 void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *ctx);参数说明 ctx指向 EVP_CIPHER_CTX 结构的指针。这个结构是在之前通过 EVP_CIPHER_CTX_new 创建的用于存储加密或解密操作的状态和参数。 解密 解密与加密差不多 // 初始化解密上下文if (!(ctx EVP_CIPHER_CTX_new())) handleErrors();// 初始化解密操作if (1 ! EVP_DecryptInit_ex(ctx, EVP_aes_128_ctr(), NULL, key, iv)) handleErrors();// 执行解密操作if (1 ! EVP_DecryptUpdate(ctx, decryptedtext, len, ciphertext, sizeof(ciphertext))) handleErrors();EVP_DecryptFinal_ex(ctx, decryptedtext len, len);// 清理解密上下文EVP_CIPHER_CTX_free(ctx);错误处理函数 您提供的代码是一个简单的错误处理函数通常用于 OpenSSL 或其他需要处理错误堆栈的库。这个函数的作用是打印错误信息到标准错误输出stderr然后终止程序。下面是对这段代码的详细解释 ERR_print_errors_fp(stderr); 这行代码调用 ERR_print_errors_fp 函数该函数是 OpenSSL 库中的一个函数用于打印错误信息。stderr 是标准错误输出流它用于输出错误信息和调试信息。这个函数会打印出所有未被处理的错误到 stderr。 abort(); 这行代码调用 abort 函数该函数是 C 标准库中的一个函数用于立即终止程序。当 abort 被调用时它会生成一个 SIGABRT 信号如果没有捕获该信号的信号处理函数程序将被终止。 这个错误处理函数通常在 OpenSSL 函数调用失败时调用以确保程序在遇到错误时能够优雅地终止并提供足够的错误信息供调试使用。
http://www.w-s-a.com/news/366533/

相关文章:

  • 品牌网站建设策重大军事新闻视频
  • 廊坊建设网站的公司wordpress清理无用缩略图
  • 桓台网站建设公司首钢建设二建设公司网站
  • 网站建设添加背景命令前端如何优化网站性能
  • 设置网站域名中山画册设计公司
  • 三更app下载网站东莞网站制作公
  • 做图书馆网站模板网站建设文化策划方案
  • 惠州城乡住房建设厅网站服装设计自学零基础
  • 网站建设常态化工作机制广州骏域网络
  • h5婚纱摄影网站模板wordpress 显示下列项目
  • 广告网站推广销售北京最新消息发布
  • 完整网站源码asp拨打12355可以找团员密码吗
  • 北京有多少家网站怎么自己在百度上做网站
  • 怎样围绕网站专题发展来做ppt网站建设回龙观
  • 网站配置服务Wordpress红色网站源码
  • 外贸网站建设内容包括软件开发公司流程
  • 做中医药网站有前景吗企业网站优化公司
  • 四川建设设计公司网站海南澄迈县
  • 邳州做网站梵克雅宝项链官网价格图片
  • dede网站收录滦平县建设局网站
  • 上海网站建设开发公注册公司要求什么条件
  • 安徽汽车网网站建设wordpress 知乎
  • 网站建设的功能都需要有哪些在线平台
  • 湖南岳阳网站开发网络公司石家庄做网站的公司哪个好
  • 西安市做网站的公司门户网站对应序号是什么
  • 太原网站域名开发什么是网页界面设计
  • 做产品类网站有哪些做一百度网站吗
  • 在线视频网站建设国外最新创意产品网站有哪些方面
  • 在一个网站下建设多个子网站宣传册画册设计公司
  • 潍坊网站建设公司排名网站建设预付