OpenSSL测试-SM3 本次作业分值 25 分| 老师 评分 任务详情
0. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务 1. 使用OpenSSL的命令计算你的8位学号(数字)的摘要值(SM3),提交截图(5') 2. 使用OpenSSL编程对计算"你的8位学号(数字)"SM3摘要值,提交代码和运行结果截图。(10’) 3. 使用OpenSSL编程对计算内容为"所有同学的8位学号(文本)"的文件的SM3摘要值,提交代码和运行结果截图。(选做(10’))
1.echo -n "20211106" | openssl dgst -sm3
2.vi compute_sm3.c
#include <openssl/evp.h>
#include <stdio.h>
#include <string.h>
int main() {
EVP_MD_CTX *mdctx;
const EVP_MD *md;
unsigned char md_value[EVP_MAX_MD_SIZE];
unsigned int md_len, i;
OpenSSL_add_all_digests();
md = EVP_sm3();
mdctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(mdctx, md, NULL);
EVP_DigestUpdate(mdctx, "20211106", strlen("20211106"));
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_free(mdctx);
printf("SM3 Digest: ");
for (i = 0; i < md_len; i++) {
printf("%02x", md_value[i]);
}
printf("\n");
return 0;
}
gcc -o compute_sm3 compute_sm3.c -lcrypto
./compute_sm3
3.for i in {20211101..20211130}; do echo $i >> dates.txt; done
vi compute_file_sm3.c
#include <stdio.h>
#include <openssl/evp.h>
#include <string.h>
int main() {
FILE *f;
EVP_MD_CTX *mdctx;
unsigned char md_value[EVP_MAX_MD_SIZE];
unsigned int md_len, i;
char data[1024];
OpenSSL_add_all_digests();
mdctx = EVP_MD_CTX_new();
EVP_DigestInit_ex(mdctx, EVP_sm3(), NULL);
f = fopen("dates.txt", "r");
if (f == NULL) {
perror("Failed to open file");
return 1;
}
while (fgets(data, 1024, f) != NULL) {
EVP_DigestUpdate(mdctx, data, strlen(data));
}
fclose(f);
EVP_DigestFinal_ex(mdctx, md_value, &md_len);
EVP_MD_CTX_free(mdctx);
printf("SM3 Digest of file: ");
for (i = 0; i < md_len; i++) {
printf("%02x", md_value[i]);
}
printf("\n");
return 0;
}
gcc -o compute_file_sm3 compute_file_sm3.c -lcrypto
./compute_file_sm3
标签:md,mdctx,compute,MD,sm3,SM3,OpenSSL,测试,EVP From: https://www.cnblogs.com/sjd-sr/p/18120431