首页 > 其他分享 >OpenSSL测试-SM4

OpenSSL测试-SM4

时间:2023-04-12 09:33:10浏览次数:27  
标签:位学 加密 int SM4 OpenSSL 解密 测试 include

  1. 在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务
  2. 使用OpenSSL的命令对你的8位学号(数字)进行加密解密,密钥的前8个字节为你的8位学号,提交过程截图(5')
  3. 使用OpenSSL编程对对"你的8位学号(数字)"进行加密解密,提交代码和运行结果截图。(10’)
  4. 使用OpenSSL编程对内容为"所有同学的8位学号(数字)"的文件进行加密解密,密钥要包含你的8位学号,提交代码和运行结果截图。(选做(10’))

1. 使用OpenSSL的命令对你的8位学号(数字)进行加密解密

openssl enc -sm4-cbc -in 20201212.txt -out ciphertext.bin -K 0123456789abcdeffedcba9876543210 -iv 0123456789abcdeffedcba9876543210

image

2. 使用OpenSSL编程对"你的8位学号(数字)"进行加密解密

#include <openssl/rsa.h>
#include <openssl/pem.h>
#include <openssl/err.h>
#include <openssl/evp.h>
#include <openssl/ec.h>
int main(int argc, char *argv[])
{
    unsigned char sm4_en[512],sm4_de[512];
    int sm4enStrLen,sm4deStrLen;
    unsigned char source[7]={0x31,0x33,0x34,0x33,0x45,0x46,0x43};
    unsigned char keyStr[16]={0x15,0x67,0x28,0xe1,0x5f,0x9a,0xfc,0x01,0xd4,0xb6,0x1b,0x4e,0x44,0x5d,0xbb,0x26};
    sm4enStrLen=my_sm4encrpt(keyStr,source,7,sm4_en);
    printf("sm4enStrLen:%d\n",sm4enStrLen);
    for(int i=0;i<sm4enStrLen;++i)
    {
        printf("0x%x",sm4_en[i]);
    }
    printf("\n");
    sm4deStrLen=dencryptStr(keyStr,sm4_en,sm4enStrLen,sm4_de);
    printf("sm4deStrLen:%d\n",sm4deStrLen);
    for(int i=0;i<7;++i)
    {
        printf("0x%x",sm4_de[i]);
    }
    printf("\n");
}
int my_sm4encrpt(unsigned char * keyStr,unsigned char * surbuf,int surlen,unsigned char * enbuf)
{
    unsigned char *out_buf = enbuf;
    int out_len;
    int out_padding_len;
    int i;
    unsigned char *iv;
    EVP_CIPHER_CTX *ctx;
    ctx = EVP_CIPHER_CTX_new();
    EVP_EncryptInit(ctx, EVP_sm4_ecb(), keyStr, iv);
    if( 0 == surlen % 16 )
    {
        EVP_CIPHER_CTX_set_padding( ctx, 0 );
    }
    out_len = 0;
    EVP_EncryptUpdate(ctx, out_buf, &out_len, surbuf, surlen);
    out_padding_len = 0;
    EVP_EncryptFinal(ctx, out_buf + out_len, &out_padding_len);
 
    EVP_CIPHER_CTX_free(ctx);
    return out_len + out_padding_len;
}
 
 
int dencryptStr(unsigned char * sm4PriKey, unsigned char *cEnStr, int cEnstrlen, unsigned char *deStr)
{
    unsigned char *iv;
    EVP_CIPHER_CTX *ctx;
    int len;
    int temlen;
    int deStrLen;
    if (!(ctx = EVP_CIPHER_CTX_new())) {
       printf("EVP_CIPHER_CTX_new failed");
    }
    if (1 != EVP_DecryptInit(ctx, EVP_sm4_ecb(), sm4PriKey, iv)) {
        printf("EVP_DecryptInit_ex failed");
    }
 
 
    if (1 != EVP_DecryptUpdate(ctx, deStr, &len, cEnStr, cEnstrlen)) {
        printf("EVP_DecryptUpdate failed");
    }
    if( 0 == len % 16 )
    {
        EVP_CIPHER_CTX_set_padding( ctx, 0 );
        len += 16;
 
    }
    if( !EVP_DecryptFinal( ctx, deStr + len, &temlen ) )
    {
        printf("EVP_DecryptFinal failed");
        return EXIT_FAILURE;
    }
    deStrLen=len+temlen;
    printf("解密数据:%d\n",deStrLen);
    for (int i = 0;i < deStrLen;i++) {
        printf("0x%02x ",*(deStr + i));
    }
    printf("\n");
    EVP_CIPHER_CTX_free(ctx);
    return deStrLen;
}

image

3. 使用OpenSSL编程对内容为"所有同学的8位学号(数字)"的文件进行加密解密,密钥要包含你的8位学号

image

标签:位学,加密,int,SM4,OpenSSL,解密,测试,include
From: https://www.cnblogs.com/20201212ycy/p/17308665.html

相关文章

  • OpenSSL测试-SM3
    OpenSSL测试-SM3任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务使用OpenSSL的命令计算你的8位学号的摘要值(SM3),提交截图(5')使用OpenSSL编程对计算"你的8位学号"SM3摘要值,提交代码和运行结果截图。(10’)使用OpenSSL编程对计算内容为"所有同学的8位学号"的文......
  • OpenSSL测试-随机数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务使用OpenSSL定义一个私有函数staticintgetRandom(char*r,intlength),获取length个字节的随机数(5‘)把上述函数集成到src中的sdf.c中的SDF_GenerateRandom中(5')在test中的main.c调用SDF_GenerateRandom......
  • OpenSSL测试-大数
    任务详情在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务基于OpenSSL的大数库计算2的N次方,N为你学号的后四位(5‘)基于OpenSSL的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(5‘)用Python或bc命令验证计算的正确性(5’)提交代码(或代码链......
  • 使用RunnerGo做接口性能、接口自动化测试
    最近在gitee上看见一款获得GVP(最有价值开源项目)的测试平台RunnerGo,看他们官网介绍包含了接口测试、性能测试、自动化测试。知道他们有saas版可以试用,果断使用了一下,对其中场景管理和性能测试印象深刻,之后也在公司自己安装使用,接下来和大家介绍一下RunnerGo的整体使用情况。登录后的......
  • 软件测试综合面试题
    项目中会对接第三方系统吗,哪些系统在项目中对接第三方系统是非常常见的。常见的对接的第三方系统包括但不限于以下几种:1.支付系统:例如支付宝、微信支付、银联支付等。如果项目需要接入支付功能,就需要对接相应的支付系统。2.物流系统:例如顺丰、圆通、中通等。如果项目中需要使......
  • 安全测试前置实践1-白盒&黑盒扫描
    作者:京东物流 陈维一、引言G.J.Myers在《软件测试的艺术》中提出:从心理学角度来说,测试是一个为了寻找错误而运行程序的过程。那么安全测试则是一个寻找系统潜在安全问题的过程,通过测试手段发现系统中可能存在的安全问题和风险,分析并进行优化,保障系统的安全质量。从应用安全维......
  • 【性能测试】04测试分析及调优
    本文通过编写性能测试分析及调优的相关流程和方法,帮助研发人员、性能测试人员或者运维人员快速地进行性能测试、瓶颈定位及调优。系统的性能是由很多因素决定的,很难面面俱到,但是可以作为分析系统性能的一个指导。适用对象和范围适用于需要进行性能分析及调优的工作。预期读者......
  • ASN.1 基础测试
    1参考https://www.cnblogs.com/rocedu/p/14891816.html#echo打印字符串和变量值2十六进制数:30030201AA,写入文件1.der,用od查看内容,用asn1view或opensslasn1pars命令查看内容,提交截图3十六进制数:3013020105160e416e79626f64792074686572653f,写......
  • 北上广测试工程师月薪20K往上,该如何做,需要会什么技能?
    ​有人回答说这只能是大企业或者互联网企业工程师才能拿到。也许是的,小公司或者非互联网企业拿两万的不太可能是码农了,应该已经转管理。还有区域问题,这个不在我的考虑范围内,因为除了北上广深杭,其他地方也很难达到。 还有人提到这个水平不止2w,其实工资是跟面试表现有关的,也跟......
  • OpenSSL测试-大数
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务基于OpenSSL的大数库计算2的N次方,N为你学号的后四位(5‘)基于OpenSSL的大数库计算你以及前面5位同学和后面5位同学的8位学号的乘积,N为你学号的后四位(5‘)用Python或bc命令验证计算的正确性(5’)提交代码(或代码链接)和运行......