相关文章推荐

我们知道使用openssl命令行从国密sm2的pem中提公钥私钥因子的命令行如下:

  • openssl ec -in sm2_test_priv.pem -text -noout 从私钥pem提取私钥
  • openssl ec -pubin -in sm2_test_pub.pem -text -noout 从公钥pem提取公钥

以私钥提取为例,那么以上部分,如何用C语言实现呢? 以下是为大家写的一个参考示例:

#include <stdio.h>
#include <stdlib.h>
#include <openssl/rsa.h>
#include <openssl/pem.h>
int main() {
    const char *filename = "test_priv.pem"; // 替换为你的PEM文件路径
    // 打开PEM文件
    FILE *file = fopen(filename, "r");
    if (!file) {
        perror("Error opening file");
        return 1;
    // 从PEM文件中读取RSA私钥
    RSA *rsa_private_key = PEM_read_RSAPrivateKey(file, NULL, NULL, NULL);
    fclose(file);
    if (!rsa_private_key) {
        ERR_print_errors_fp(stderr);
        return 1;
    // 输出私钥信息
    printf("RSA Private Key:\n");
    RSA_print_fp(stdout, rsa_private_key, 0);
    // 释放私钥内存
    RSA_free(rsa_private_key);
    return 0;

编译命令: gcc main.c -o x -lssl -lcrypto

在goldboar写的SM2签名及验签函数( http://download.csdn.net/detail/goldboar/3833072)的基础上,改写的一个纯粹用来做SM2签名验证的函数,编译时需要用到OpenSSL的头文件和库文件(libeay32.lib或libeay32.dll),与goldboar的程序区别如下: 1.仅用于做验签,不能签名; 2.验签使用外部传入的SM2SM2以(x,y)坐标形式传入; 3.签名也是以(r,s)坐标形式传入; 4.增加了一些内存清理语句,内存泄漏有改善; 5.goldboar的程序使用的ECC参数是示例参数,不是GM/T 0003.5-2012规范定义的参数,这里的验签函数采用的是规范定义的参数。 6.将一些对椭圆曲线参数的验证操作放入 _DEBUG 宏限制的范围内。因为参数是规范推荐的,已经过验证,所以在程序无需再验证。将这些验证语句放入 _DEBUG 宏限制的范围内以后,如果编译 release 版本时就不会包含这些验证语句,效率可以有一点提升。
这个是我基于gmp大数运算库 和借鉴了lib-ecc的代码实现的c语言sm2的接口 里面包含了sm3的算法实现 只是实现了签名验证 加密和解密 验证了sm2的数据没有具体应用与工程 整个代码是在linux下 用eclipse开发的 没有自己编写makefile文件 需要调试的话自己写一个或专业安装ecslipse 里面包括了源代码和gmp的库 这个代码只是起到借鉴和交流的作用 由于本人水平有限,不足之处希望大家批评 已知的问题。 解密的时候没有验证无穷远点(我不会)
openssl rsa -in server.pem -out server.key 提出 openssl x509 -in server.pem -out server.crt 2.从pfx提取信息,并转换为key格式(pfx使用pkcs12模式补足) (1)提取对 openssl pkcs12 -in 1.pfx... ssh-keygen -y -f test_ld2.pem > test_ld2.pem.pub 完成后使用vi命令来查看一下提取出的,然后:wq保存并退出编辑:
本资源为系统集成项目管理工程师考试(软考)2022年真题,包含答案与详细解析。每卷共分为两科,成绩均 ≥45 即通过考试: 1. 综合知识(选择题 75 道,75分) 2. 案例分析(问答题 4 道,75分) 计算机技术与软件专业技术资格(水平)考试(以下简称计算机软件资格考试)是原国计算机软件专业技术资格和水平考试(简称软件考试)的完善与发展。计算机软件资格考试是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试,其目的是科学、正地对全国计算机与软件专业技术人员进行职业资格、专业技术资格认定和专业技术水平测试。工业和信息化部教育与考试心负责全国考务管理工作,除台湾地区外,计算机软件资格考试在全国各省、自治区、直辖市及计划单列市和新疆生产建设兵团,以及香港特别行政区和澳门特别行政区,都建立了考试管理机构,负责本区域考试的组织实施工作。计算机软件资格考试在全国范围内已经实施了二十多年,近十年来,考试该考试由于其权威性和严肃性,得到了社会各界及用人单位的广泛认同,并为推动国家信息产业发展,特别是在软件和服务产业的发展,以及提高各类信息技术人才的素质和能力发挥了重要作用。
MATLAB基础-符号变量的使用示例,提供三个例程代码,并给出示例图 在 MATLAB ,syms 函数用于定义符号变量。符号变量是一种特殊类型的变量,用于表示数学表达式的符号和变量,而不是数值。 在定义符号变量之后,我们可以使用 MATLAB 的符号计算工具箱进行符号计算,例如求解方程、求导、积分、求极限、求解线性代数问题等。 需要注意的是,符号计算是一种复杂的运算,通常比数值计算更慢,并且可能会导致精度损失。因此,在使用符号计算时应该注意控制计算的复杂度和精度,以避免出现不必要的错误。 MATLAB基础-符号变量的使用示例 1 举例1: 4 举例2 5 举例3 6 例程代码如下 syms x; y=x^(-2)-x^(-4); ezplot(y) 运算结果如下图所示: syms a; b=a+a^(-2); ezplot(b) 运算结果如下图所示:
要读取SM2的PEM文件,可以使用Bouncy Castle库。以下是使用Bouncy Castle库读取SM2 PEM文件的Java代码示例: ```java import java.io.FileReader; import java.security.KeyFactory; import java.security.Security; import java.security.interfaces.ECPublicKey; import java.security.spec.X509EncodedKeySpec; import org.bouncycastle.asn1.x9.X9ECParameters; import org.bouncycastle.jcajce.provider.asymmetric.ec.BCECPublicKey; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.bouncycastle.openssl.PEMParser; import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter; public class SM2PublicKeyReader { public static void main(String[] args) throws Exception { Security.addProvider(new BouncyCastleProvider()); // 读取PEM文件 FileReader fileReader = new FileReader("sm2.pem"); PEMParser pemParser = new PEMParser(fileReader); // 解析PublicKey JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC"); Object object = pemParser.readObject(); X509EncodedKeySpec keySpec = new X509EncodedKeySpec(converter.getPublicKey((BCECPublicKey) object).getEncoded()); ECPublicKey publicKey = (ECPublicKey) KeyFactory.getInstance("EC", "BC").generatePublic(keySpec); // 获取参数 X9ECParameters ecParams = ((BCECPublicKey) publicKey).getParameters(); // 使用进行加解密等操作 // ... pemParser.close(); 注意,这里的`sm2.pem`文件只包含。解析出来的类型为`ECPublicKey`。您还可以使用`getParams()`方法获取的参数。在此示例,我们使用`X9ECParameters`类型来获取的参数。 如果您想要读取PEM文件,请参考我之前的回答。
 
推荐文章