实验二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;
}
测试