C语言
C语言
BasicLab基础架构实验室
本人深耕基础架构领域,曾在国内500强大厂研发企业级百亿量级吞吐中间件,擅长Java语言、Go语言、Python语言、C语言、NodeJS、Web、Linux、深度学习、大数据、云原生等
展开
-
Gmssl编译问题: error while loading shared libraries: libssl.so.1.1: cannot open shared object file
在Centos7上编译安装Gmssl后,运行gmssl version出现如下错误:gmssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory查找一下libssl.so.1.1的位置,然后连接到/usr/lib6...原创 2019-08-31 11:58:28 · 8450 阅读 · 3 评论 -
Gmssl 各平台编译方法【绝对可用】
最近工作上需要在不同平台上使用SM2、SM4算法,所以需要在不同平台上进行编译Gmssl库,下面是我总结的编译命令。1、arm-himix200-linux(himix200芯片)gmssl动态链接库编译,代码如下:目录:GmSSL-master$ ./Configure --prefix=/home/qli/libopenssl --cross-compile-prefix=/o...原创 2019-11-26 20:30:53 · 13799 阅读 · 19 评论 -
CMakeLists 在实际项目中的编写实例
最近在项目中经常需要编写CMakeLists,在此记录一下正式项目中是如何编写使用的,特此记录便于日后查阅。project("device-authentication")cmake_minimum_required(VERSION 3.5)INCLUDE_DIRECTORIES( ../include/ ../../src/net/mbedtls/include ../...原创 2020-02-23 17:01:16 · 776 阅读 · 0 评论 -
CMakeLists 关于List的使用方法
list(LENGTH <list><output variable>)list(GET <list> <elementindex> [<element index> ...]<output variable>)list(APPEND <list><element> [<element>...转载 2019-09-30 10:15:45 · 12010 阅读 · 0 评论 -
CMakeLists 中常用的预定义变量
最近在写CMakeLists遇到了很多预定义变量,特此记录便于日后查阅。文件结构如下:常用路径变量PROJECT_NAME:通过PROJECT指定的项目名称 project(Demo)PROJECT_SOURCE_DIR:工程的根目录,上图中的Demo目录PROJECT_BINARY_DIR:执行cmake命令的目录,一般是在build目录,在此目录执行cm...原创 2020-02-23 16:55:34 · 2863 阅读 · 0 评论 -
CMakeLists 正式环境模板常用语法
CMakeLists.txt是CMake的配置文件,方便编译大型项目。我为自己常用的项目写了一个统一的模板,把常用的语法记录下来。使用的时候去掉对应的注释就可以。cmake_minimum_required(VERSION 2.8)project(pr) #编译选项#add_definitions("-DXXX") # ${CMAKE_SOURCE_DIR}: The direc...原创 2020-02-23 17:23:10 · 1184 阅读 · 0 评论 -
CMakeLists 编译失败:Clock skew detected 问题解决
今天在虚拟机上用GCC编译一个程序的时候,出现了下面的错误:make: warning: Clock skew detected. Your build may be incomplete试了make clean后再make,仍然是同样的问题,最后发现这个错误的原因在于系统时间比文件修改时间早,看了下我的系统时间竟然还是2012-01-13,而今天都已经是2012-01-31呢,于是修改...原创 2019-10-27 22:59:31 · 688 阅读 · 0 评论 -
CMakeLists 实现动态宏开关
最近在工作中需要通过一份C代码控制逻辑走向,网上找了一下资料,发现可以通过在CMakeLists文件中动态定义宏开关,从而能够达到编译出不同逻辑流的代码。具体步骤:首先,我在src代码里编写了若干debug的输出:#IFDEF DEBUG some print command;#ENDIF然后,在CMakeLists文件中添加DEBUG的定义:IF (CMAK...原创 2020-02-23 16:20:57 · 5661 阅读 · 0 评论 -
C语言进制转换—16进制最大能表示10进制数是多少?
1个字节:最大0xFF = 255(存储类型byte和char) 2个字节:最大0xFF FF = 65535(存储类型shot int) 4个字节:最大0xFF FF FF FF= 4294967295(存储类型int 、long) 8个字节:最大0xFF FF FF FF FF FF FF FF= 18446744073709551615(存储类型long long)十六进制(英文名...原创 2019-08-12 21:25:18 · 5300 阅读 · 0 评论 -
C语言实现大小写转换的三种方法
实现大小写转换的三种方法方法一:#include<stdio.h>#include<stdlib.h>int main(){ char str[] = "AbCdEf"; char c; int i = 0; while (str[i] != '\0') { c = str[i]; if (c >= 'A' && c...原创 2019-10-26 17:08:03 · 26000 阅读 · 3 评论 -
Kubernetes(Docker)容器部署加载不到 .so动态链接文件(java.lang.UnsatisfiedLinkError: no xxx in java.library.path)
找了一下午,网上文章有很多,但都不适用,因为我是通过容器进行部署服务,然后容器加载.so动态链接文件,所以网上大多数文章是设置Linux的动态链接目录,这里统一记录一下解决方法:1、Linux设置LD_LIBRARY_PATH环境变量普通的 Jar 包加载 .so 可以通过设置动态链接目录的方式来找到动态链接文件$ vim /etc/profile$ export LD_LIBRA...原创 2019-10-22 17:19:44 · 8624 阅读 · 17 评论 -
Sm2公私钥
原文地址:https://blog.csdn.net/andylau00j/article/details/888867091.SM2为国家密码管理局公布的公钥算法,其加密强度为256位2. SM2公钥64字节,私钥32字节3.加解密、签名验签过程,掺杂随机数导致,结果长度在一定范围内变长。签名长度70-72字节不等。SM2签名算法支持多大的数据量,签名结果为...转载 2019-09-03 12:04:55 · 10562 阅读 · 0 评论 -
SM2 椭圆曲线公钥密码算法,完整c代码,前人栽树,后人乘凉
某电信安信息安全数学基础实验要求实现SM2椭圆曲线公钥密码算法这是基于mircal库实现的,没有mircal库的下载我以前的博客发的文件,根据教程在vs上搭建。一共四个文件 SM2.c SM2.h SM3.c SM3.hSM2.c#include <stdio.h>#include <stdlib.h>#include <memory.h>...转载 2019-09-03 14:24:42 · 8699 阅读 · 7 评论 -
Visual Studio搭建miracl,及.lib .h文件的下载
感谢两位dalao的博客:https://blog.csdn.net/shuilan0066/article/details/8520337https://blog.csdn.net/baron_wu/article/details/83186430.lib太麻烦了,看别人的教程怎么也弄不好,直接上传在vs2017上已经弄好的miracl.h miracl.def miracl.li...转载 2019-09-03 14:25:34 · 959 阅读 · 0 评论 -
C语言学习笔记之字符串拼接的2种方法
1. 使用strcat进行字符串拼接#include <stdio.h>#include <stdlib.h>#include <string.h>int main() { char *firstName = "Theo"; char *lastName = "Tsao"; char *name = (char *) mal...原创 2019-10-26 18:38:01 · 3495 阅读 · 0 评论 -
C语言实现md5加密
网上找到的实现md5函数代码,包括一个头文件md5.h和一个源文件md5.c,用下面的测试代码test.c测试通过,各文件依次如下:1、md5.h#ifndef MD5_H#define MD5_H typedef struct{ unsigned int count[2]; unsigned int state[4]; unsigned char buf...转载 2019-09-05 11:41:59 · 5581 阅读 · 0 评论 -
C语言匹配服务端返回数据方法
最近项目组让我来做安全模块,有一个地方比较有意思,就是用C语言来匹配服务端返回数据,代码如下:static uint8_t* findSnfromBuf(uint8_t* in){ int i = 7; while(in[i]){ if ( (in[i-7] == '\"') && (in[i-6] == 'd') ...原创 2019-10-11 20:49:50 · 398 阅读 · 0 评论 -
HMAC-SHA1 签名算法(签名设计思路)
1、HMAC-SHA1:HMAC是哈希运算消息认证码 (Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。HMAC-SHA1签名算法是一种常用的签名算法,用于对一段信息进行生成签名摘要。2、需要注意哪些问题:a) hmac-sha1可以认为是不可逆的加密算法,sk只能保存在服务器,不能通过任何途径传输给客户端b) 服务器发一个签名给客户端,此后服务器通过签名来校验客户端的访问权限原创 2020-05-25 20:11:04 · 5892 阅读 · 0 评论 -
C语言混合加密算法(通用)
最近在项目中写了一种异或混合加密算法,特此记录便于日后查阅。#include "com_openailab_oascloud_security_jni_eaidk_EaidkAuthJNI.h"#include <stdio.h>#include <string.h>#include <stdint.h>#include <stdlib.h>#include <sys/time.h>//异或混合加密算法int mixEncry原创 2020-05-09 19:45:15 · 1057 阅读 · 4 评论 -
SM2基于Gmssl加解密算法Demo
GmSSL介绍Gmssl介绍:http://gmssl.org/当然本文也是参考http://gmssl.org/其中SM2为非对称算法SM2密钥生成pair<string, string> GenKey(void){ EC_KEY *keypair = NULL; EC_GROUP *group1 = NULL; keypair = ...转载 2019-09-07 18:22:22 · 3706 阅读 · 10 评论 -
C语言结构体初始化的四种方法
定义typedef struct { int first; double second; char* third; float four;} T_init_member;方法一:定义时赋值T_init_member test = {-10,3.141590,"method one",0.25};需要注意对应的顺序,不能错位。方法二:定义后逐...原创 2020-03-26 15:51:08 · 1743 阅读 · 2 评论 -
C语言获取文件大小
方法一:获得文件大小需要用到2个函数:fseek(),ftell(),介绍如下: fseek()函数: 原型:intfseek(FILE *stream, long offset, int fromwhere); 参数: stream: 第一个参数stream为文件指针 offset : 第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移 ...原创 2020-03-24 15:47:57 · 3596 阅读 · 0 评论 -
C语言将字节数组转为hex字符串
最近项目组让我来做安全模块,在数据传输之前需要将数组转换文hex字符串进行传输,因为字节数组是不能进行传输的,这个方法非常有用,特此记录便于日后查阅,代码如下:static uint8_t hex_lookup[16] = { '0', '1', '2', '3', '4', '5', '6', '7','8','9', 'a', 'b', 'c', 'd', 'e', 'f' };st...原创 2019-10-11 20:56:06 · 3760 阅读 · 0 评论 -
C语言对字节数组扰动
最近做安全模块,有对数组进行扰动打乱的方法,这里记录一下,便于日后查阅,代码如下:static int reoder(uint8_t *src, uint8_t *dst, int len){ int i; int m = 0; int n = len - 1; for (i = 0; i < len; i++) { if (i % 3 == 0) { dst...原创 2019-10-11 20:52:04 · 381 阅读 · 0 评论 -
C语言通过位移、异或计算对字节数组加密
最近在工作中做数据安全模块,有些非常巧妙的位移、异或计算加解密使用的非常好,下面记录一下。1、加密代码参数中plaintext为明文、plaintext_size=64、ciphertext为密文、ciphertext_size=128int fake_rsa_encrypt( const unsigned char* plaintext, unsigned int plai...原创 2019-10-11 17:07:40 · 1626 阅读 · 0 评论 -
C语言实现Base64编码/解码
Bse64是一种以64个可打印字符对二进制数据进行编码的编码算法。base64在对数据进行编码时以三个8位字符型数据为一组,取这三个字符型数据的ASCII码,然后以6位为一组组成4个新的数据,这4个新的数据有6位,所以它的最大值为2^6=64。我们以4个6位数据的十进制数从base64表中得到最终编码后的字符。Base64 编码表Value Char Value Cha...原创 2019-09-05 11:38:32 · 3442 阅读 · 4 评论 -
C语言SM4算法实现(基于GMSSL)
最近项目中需要通过C语言实现SM2、SM4国密算法,这里我基于GMSSL来进行实现,本人已在这5种环境下全部实现,并已使用在生产环境中。1、GMSSL编译GMSSL编译在不同环境下都不一样,这里我提供Window64、Arm64、Linux64、Android、himix200海思芯片 环境编译方法,传送门如下:Gmssl官网地址Gmssl 各平台编译方法【绝对可用】如果各位都...原创 2020-01-21 13:56:10 · 7384 阅读 · 20 评论 -
C语言SM2算法实现(基于GMSSL)
最近项目中需要通过C语言实现SM2、SM4国密算法,这里我基于GMSSL来进行实现,本人已在这5种环境下全部实现,并已使用在生产环境中。1、GMSSL编译GMSSL编译在不同环境下都不一样,这里我提供Window64、Arm64、Linux64、Android、himix200海思芯片 环境编译方法,传送门如下:Gmssl官网地址Gmssl 各平台编译方法【绝对可用】如果各位都...原创 2020-01-21 13:15:56 · 19150 阅读 · 40 评论 -
Mbedtls加密组件库使用
下载与安装github的下载:https://github.com/ARMmbed/mbedtls 官网下载:https://tls.mbed.orgmbedtls-2.6.0库我们要在工程中引用的目录有include,library和visualc这3文件夹:include: 库头文件所在 library:库源文件(.c)所在 visualc:工程文件所在,使用VS2010...原创 2019-10-26 16:36:56 · 6566 阅读 · 0 评论 -
C语言RSA算法实现(基于Mbedtls)
最近项目中需要通过C语言实现RSA算法,这里我通过Mbedtls库来进行实现。1、下载Mbedtls首先我们将Mbedtls代码放入到工程中,相关传送门如下:Mbedtls官方下载地址官方网址是国外的下载慢,所以也附上本文使用到的Mbedtls代码,传送门如下:Mbedtls加解密工具代码2、引入Mbedtls头文件这里我们在工程中的CMakeLists.txt中引入M...原创 2020-01-21 14:25:26 · 4012 阅读 · 2 评论 -
C语言AES算法实现(基于Mbedtls)
最近项目中需要通过C语言实现AES算法,这里我通过Mbedtls库来进行实现。1、下载Mbedtls首先我们将Mbedtls代码放入到工程中,相关传送门如下:Mbedtls官方下载地址官方网址是国外的下载慢,所以也附上本文使用到的Mbedtls代码,传送门如下:Mbedtls加解密工具代码2、引入Mbedtls头文件这里我们在工程中的CMakeLists.txt中引入M...原创 2020-01-21 14:35:42 · 3419 阅读 · 0 评论 -
C语言MD5算法实现(基于Mbedtls)
最近项目中需要通过C语言实现MD5算法,这里我通过Mbedtls库来进行实现。1、下载Mbedtls首先我们将Mbedtls代码放入到工程中,相关传送门如下:Mbedtls官方下载地址官方网址是国外的下载慢,所以也附上本文使用到的Mbedtls代码,传送门如下:Mbedtls加解密工具代码2、引入Mbedtls头文件这里我们在工程中的CMakeLists.txt中引入M...原创 2020-01-21 14:40:22 · 3424 阅读 · 0 评论 -
C语言安装openssl
https://blog.csdn.net/zzq900503/article/details/16841561https://blog.csdn.net/houjixin/article/details/25806151原创 2019-08-31 18:33:48 · 888 阅读 · 0 评论 -
C语言0x00在无符号数组使用中的注意事项
C语言0x00在无符号数组使用中,不能使用 strlen() 计算数组长度,否则不准确,0x00 会起到停止符的作用。例如:uint8_t str[4] = {0x01,0x00,0x02,0x03};size_t len = strlen(str);这里按照常理来说 len 应该等于 4,但是实际上 len 等于 1,原因是\0 在内存中是以0x00来存放的,而数字0 是一个常用...原创 2019-10-17 11:09:34 · 4462 阅读 · 4 评论 -
C语言make的多线程编译
因为CPU是一个影响编译速度的重要因素,通过以下命令可以利用计算机所有线程来进行编译,命令如下: $ make -j可以把项目在进行中的并行编译,现在服务器上的CPU差不多都是多核多线程的,让make最多允许4个编译进程同时执行,这样可以更有效的利用CPU资源,命令如下: $ make -j4C语言make的多线程编译介绍到此结束。...原创 2019-08-31 10:36:44 · 3041 阅读 · 0 评论 -
C语言字节与不同进制转换关系(1字节、2进制、16进制)
最近项目组让我来做安全认证模块(SAS),因为涉及到算法领域,所以与字节转换密切相关,这里我需要明确1字节、16进制、2进制之间的关系,如下所示:∵ 1byte=8bit=128+64+32+16+8+4+2+1=255(无符号2进制)∵ 1byte=OXFF=15*16^1+15*16^0=255(双16进制)∴ 1byte=OXFF=8bit∴ 1字节==双16进制数==8位无符号...原创 2019-09-04 17:40:06 · 2721 阅读 · 0 评论 -
Visual Studio使用openssl库环境搭建
最近项目组需要写加解密算法,通过openssl实现,在这里讲一下openssl环境配置方式在VS的工程设置工程属性1:右击工程名 ——> 选择“属性”2:在“VC++目录”——> “包含目录”中添加openSSL的include文件(在您安装openssl的文件下)3:在“VC++目录”——> “库目录”中添加openSSL的lib文件(在您安装openssl的文件...原创 2019-09-05 17:37:40 · 5953 阅读 · 2 评论 -
C语言中,为什么字符串可以赋值给字符指针变量
C语言中,为什么字符串可以赋值给字符指针变量char *p,a='5';p=&a;//显然是正确的,p="abcd"; //但为什么也可以这样赋值??问:一直理解不了为什么可以将字串常量赋值给字符指针变量?答:双引号做了3件事: 1、申请了空间(在常量区),存放了字符串 2、在字符串尾加...原创 2019-09-10 16:06:20 · 991 阅读 · 1 评论 -
Visual Studio报错CRT detected that the application wrote to memory after end of heap buffer.
最近在调试代码的时候遇到这样一个错误:detected that the application wrote to memory after end of heap buffer,图示如下:报错代码块如下:pResOut->text = (unsigned char *)malloc(strlen(enc_text));memset(pResOut->text, 0,...原创 2019-09-22 19:13:19 · 4254 阅读 · 6 评论 -
C语言数组初始化的三种方法
C语言中,数组初始化的方式主要有三种:1、声明时,使用 {0} 初始化;2、使用memset;3、用for循环赋值。那么,这三种方法的原理以及效率如何呢? 请看下面的测试代码:#define ARRAY_SIZE_MAX (1*1024*1024) void function1(){ char array[ARRAY_SIZE_MAX] = {0}; ...原创 2019-09-27 10:37:06 · 18423 阅读 · 0 评论