实验二OpenSSL API

任务列表
参考 https://blog.csdn.net/bruce135lee/article/details/81811403 调用OpenSSL API

  • 0 推荐在openEuler中实现 ,参考https://www.cnblogs.com/rocedu/p/6012545.html第三节
  • 1 提交相关代码码云(或github)链接
  • 2 提交不少于6张编译测试过程截图
  • 3 至少包含SM4,SM3的测试

实验过程
一、下载源码,解压后进行编译
1.下载源码
https://www.openssl.org/source/openssl-1.1.1-pre4.tar.gz
https://www.openssl.org/source/openssl-1.1.1-pre5.tar.gz
2.解压缩(下载tar:yum install tar)

tar xzvf openssl-1.1.1-pre4.tar.gz
tar xzvf openssl-1.1.1-pre5.tar.gz

3.编译步骤

cd openssl-1.1.1-pre5
./config
make

4.配置LD_LIBRARY_PATH并检查openssl可执行程序版本号

export LD_LIBRARY_PATH=`pwd`
./apps/openssl version

二、检查 SM3 哈希校验和
echo -n "abc" | ./apps/openssl dgst -SM3

三、检查椭圆曲线是否包含SM2
./apps/openssl ecparam -list_curves | grep SM2

四、检查对称算法
./apps/openssl enc -ciphers

五、测试SM4-ECB电子密码本模式, 选取AES-128-ECB作为参考
编译代码:

gcc -Iinclude -c main.c
gcc main.o libcrypto.so -o a.out
export LD_LIBRARY_PATH=`pwd`
ldd a.out
./a.out

六、sm3的代码与测试
代码:

#include <stdio.h>
#include <string.h>
#include <openssl/evp.h>
#include <openssl/err.h>


void tDigest(){
	unsigned char md_value[EVP_MAX_MD_SIZE];
	unsigned int md_len;
	EVP_MD_CTX *mdctx;
	mdctx = EVP_MD_CTX_new();
	char msg1[] = "20201319";
	char msg2[] = "WXL";
	
	EVP_MD_CTX_init(mdctx);
	EVP_DigestInit_ex(mdctx, EVP_sm3(), NULL);
	EVP_DigestUpdate(mdctx, msg1, strlen(msg1));
	EVP_DigestUpdate(mdctx, msg2, strlen(msg2));
	EVP_DigestFinal_ex(mdctx, md_value, &md_len);
	EVP_MD_CTX_destroy(mdctx);

	printf("Debug:Message1%s and Message2%s digest to:\n",msg1, msg2);
	for(int i = 0; i<md_len; i++){

		printf("0x%02x ", md_value[i]);
	}
	printf("\n");
}

int main(){

	OpenSSL_add_all_algorithms();
	tDigest();
	return 0;
}

测试

posted @ 2022-10-26 14:35  20201319吴向林  阅读(84)  评论(0编辑  收藏  举报