分类 C 下的文章

在我们开始之前,先要弄清楚我们在搭建一个用于做什么的 C/C++ 环境。一个 C/C++ 环境最基础的要求是舒适的代码编写体验(包括智能提示、代码高亮等)以及便利的编译调试功能(包括源码编译、链接、生成可执行文件等)。我们既可以分别配置代码编辑器和编译器来完成环境的搭建,也可以直接选用集成开发环境(IDE,Integrated Development Environment) 来进行程序开发。

C程序中,函数是不能直接返回一个完整的数组的,我们指定数组本质是一个指针常量,那么能不能通过返回指针的方式间接返回数组呐?答案是不完全可以,函数内变量是局部变量,返回局部变量的地址是不可以的,但是由于静态变量的作用域为全局所有可以返回静态变量。所以这里有两种方式从函数中活动数组:返回静态变量地址、以指针参数的形式获得数组。

在工作中要对接一些下位机,返回的数据中有些是BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制中的0~9这10个数码,是一种二进制的数字编码形式。以下是8421类型的BCD码,还有其它格式的BCD码,但是没怎么遇到过,暂时不表。

前言

在之前的文章中,实现了PKCS7填充,但是IV是固定的,从安全的角度来说,每经过一次加密和解密后IV应当重新随机生成。通过搜索,得知了一个概念:密码学安全伪随机数生成器(亦作密码学伪随机数生成器,英文:Cryptographically secure pseudo-random number generator,通称CSPRNG),之后在Github上找了一个C语言实现的库:CSPRNG

前言

在上一篇介绍Tiny AES中,该库本身是没有提供填充模式的,所以,明文,密码,初始向量都是16字节的倍数,但是在实际使用中,明文是没有办法时时刻刻都是16字节的倍数的。所以需要找到一种填充方式。大部分PADDING模式为PKCS5PKCS7,由于PKCS5填充是的8字节,PKCS7填充的是16字节,所以推荐使用PKCS7

前言

在上一篇文章中介绍了AES加密涉及到的参数,本文将介绍一个用C语言实现的AES库————tiny-AES-c,简单易使用。

之前写C代码的时候,头文件都是复制粘贴过来的,时间久了,发现想自己手写代码的时候都不知道要包含哪些头文件了,所以稍微整理下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>

int main(void)
{
    // uint8_t[4] 数组转成单个 10 进制数值
    uint8_t uint8_t_array[]={0x00,0x00,0x08,0xcc};
    
    uint32_t decimal = 0;
    
    decimal = (uint8_t_array[0]<<24)|(uint8_t_array[1]<<16)|(uint8_t_array[2]<<8)|(uint8_t_array[3]);
    
    printf("%d",decimal);
    
    printf("\n\n");
    
    // 将单个 10 进制数值转成 uint8_t[4] 数组
    unsigned char hexBuffer[4]={0};
    int i;
    
    memcpy((char*)hexBuffer,(char*)&decimal,sizeof(int));
    
    for(i=3;i>=0;i--)
        printf("%02X ",hexBuffer[i]);
    
    
    printf("\n\n");
    
    return 0;    
}

本程序的作用,创建两个线程,线程A创建Unix套接字客户端,与Unix套接字服务端通信,收发数据,线程B创建websocket服务端,与浏览器通信,收发数据。

本程序的作用是,创建两个线程,线程A负责产生数据并存入数据库,线程B创建一个Unix套接字服务端并监听。