【C++随记2】linux系统下简单加密算法实现

1. 安装c++

在 CentOS7 上,可以使用 yum 包管理器来安装 C++11 的开发工具和库。具体步骤如下:

1.1 更新系统软件包到最新版本:

sudo yum update #更新

1.2 安装 C++11 开发工具和库:

sudo yum install gcc-c++ -y
sudo yum install libstdc++-devel -y

以上命令会安装GNU C++编译器和标准C++库的开发文件,包括头文件和库文件。其中,gcc-c++是C++编译器,libstdc+±devel是标准C++库的开发文件。

1.3 检查安装是否成功:

gcc --version
g++ --version
在这里插入图片描述

2. 测试程序

2.1 创建项目目录

在test目录下,创建项目目录secretkey,在该目录下创建src、obj、lib和include分别用来保存.cpp源文件、过程文件.o、生成的动态库文件.so和头文件.h,主函数创建在主目录下。

2.2 创建Makefile编译脚本文件

根据程序文件的名称,创建编译脚本,使用make执行,实现动态库编译
此处避坑,PROJECT=libprint_func.so 后面的名称必须要加上’lib’,否则编译调用函数时,无法找到该动态库文件,即原程序名称为print_func,加上lib生成动态库

#生成的动态库文件名
PROJECT=libprint_func.so 
#使用的编译器,如果用c语言则使用gcc
CC=g++  

#源文件保存路径,使用通配符wildcard在路径src目录下查找.cpp文件,如果用c语言则为*.c
SOURCES=$(wildcard src/*.cpp)   
#patsubst函数用于将文件模式进行替换,$(patsubst 原模式, 目标模式, 文件列表)
OBJECTS=$(patsubst %.cpp,%.o,$(SOURCES))

.PHONY:clean

CFLAG = -Iinclude -fPIC -shared
LD_FLAG = -fPIC -s -Wl,-z,relro,-z,now,-z,noexecstack -fstack-protector-all

$(PROJECT): $(OBJECTS)
    mkdir -p lib
    $(CC)   -shared -o lib/$@ $(patsubst %.o,obj/%.o,$(notdir $(OBJECTS))) $(LD_FLAG)
    @echo "finish $(PROJECT)"

.cpp.o:
    @mkdir -p obj
    $(CC) -c $< $(CFLAG) -o obj/$(patsubst %.cpp,%.o,$(notdir $<))

clean:
    -rm -rf obj lib
    $echo "clean up."

2.3 创建程序文件

分别在src中创建.cpp文件,在include中创建.h文件,在secretkey主目录下创建main.cpp文件,并分别敲入c++代码
transfer.cpp

#include<cstdio>
#include<cstdlib>
#include<ctime>
#include<string>

//字符数组,用于随机数匹配
unsigned char Number[10] ={
   
   '0','1','2','3','4','5','6','7','8','9'};
unsigned char Letters[52]={
   
   'a','b','c','d','e','f','g','h','i','j','k','l','m',
                           'n','o','p','q','r','s','t','u','v','w','x','y','z',
                           'A','B','C','D','E','F','G','H','I','J','K','L','M',
                           'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};

//long型转换成字符
bool transferLong2ByteArray(unsigned char* byte, unsigned char length, unsigned long version){
   
   
    unsigned long temp = version;
    for(unsigned char i = 0; i < length; ++i){
   
   
        unsigned char res = (unsigned char)(temp & 0xff);
        byte[i] = res;
        temp = temp >> 8;
    }
    return true;
}

//字符转换成long型
unsigned long transferByteArrayToLong(unsigned char* byte, unsigned char length)
{
   
   
    unsigned long version = 0;
#if 1
    for(unsigned int i = 0; i < length; ++i){
   
   
        unsigned long temp = byte[i];
        version |= (temp << i * 8);
    }
#else
    long s = 0;
    long s0 = (byte[0] & 0xff);
    long s1 = (byte[1] & 0xff) << 8;
    long s2 = (byte[2] & 0xff) << 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值