我们知道使用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";
FILE *file = fopen(filename, "r");
if (!file) {
perror("Error opening file");
return 1;
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.验签使用外部传入的SM2公钥,SM2公钥以(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文件中的私钥,请参考我之前的回答。