公钥生成命令_LKT系列加密芯片如何预置openssl生成的rsa密钥完成运算

第一篇 openssl密钥参数与LKT加密芯片密钥参数的对应关系

1、测试目标

将openssl生成的RSA1024位密钥与LKT系列加密芯片中的公私钥文件参数对应起来。

2、测试环境

本示例运行环境为Linux ubuntu 14.04系统、OpenSSL 1.0.1f 6 Jan 2014

3、测试步骤

1.1 运行linux系统,安装openssl

在终端中输入安装openssl安装指令

$ sudo apt-get install openssl

1.2 创建测试目录openssl-genrsa证书-LKT,并进入该路径

$ mkdir openssl-genrsa证书-LKT

$ cd mkdir openssl-genrsa证书-LKT

1.3 登录openssl

$ openssl

1.4 利用openssl生成pem格式的rsa1024位私钥文件

OpenSSL> genrsa -out rsa_prikey.pem 1024

注意:若执行成功,在该路径下生成pem格式私钥文件

1.5 转换pem文件格式

OpenSSL> rsa -in rsa_prikey.pem -text -noout -out rsa_private.txt

注意:若执行成功,在该路径下生成txt格式的私钥文件

1.6 利用openssl生成pem格式的rsa1024位公钥文件

OpenSSL> rsa -in rsa_pubkey.pem -pubout -out rsa_public.txt

注意:若执行成功,在该路径下生成pem格式公钥文件

1.7 转换pem文件格式

OpenSSL> openssl rsa -pubin -in rsa_pubkey.pem -text -noout -out rsa_public.txt

注意:若执行成功,在该路径下生成txt格式的公钥文件

1.8 私钥文件解析

使用任意工具软件打开rsa_private.txt文件,如图1所示,prime1、prime2、exponent1、exponent2、coefficient,依次对应于LKT系列加密芯片RSA私钥中P、Q、DP、DQ、QINV这5个参数,注意顺序不能颠倒。遇到0x00开头的数据,则将0x00删除。

069df2080ccb8d0308b69c8bb471a28b.png

图1 私钥对应格式

1.1 公钥文件解析

使用任意工具软件打开rsa_public.txt文件,如图2所示,Modulus、Exponent依次对应于LKT系列加密芯片RSA公钥中N、e这两个参数,注意顺序不能颠倒。遇到0x00开头的数据,则将0x00删除。

a7c6b7551c8086a49279a8f5908bf4d8.png

图2 公钥对应格式

至此,对应关系已说明清楚,下期讲解如何将公私钥数据写入到LKT系列加密芯片中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 OpenSSL 生成 RSA 密钥对可以分为以下步骤: 1. 生成私钥:使用 OpenSSL 命令行工具 `openssl`,执行以下命令生成一个 2048 位的 RSA 私钥: ```bash openssl genpkey -algorithm RSA -out private_key.pem -aes256 ``` 该命令生成一个加密的 PEM 格式的私钥文件 `private_key.pem`,并要求设置一个密码来保护私钥。 2. 提取公钥:从私钥文件中提取公钥,可以使用以下命令: ```bash openssl rsa -in private_key.pem -pubout -out public_key.pem ``` 该命令将从私钥文件中提取公钥,并将其保存到一个 PEM 格式的文件 `public_key.pem` 中。 现在,你可以使用这两个文件来进行加密和解密操作。在加密时,你需要使用公钥加密数据,然后使用私钥解密数据。在签名时,你需要使用私钥对数据进行签名,然后使用公钥验证签名。 下面是一个使用 OpenSSL 库的例子,它演示了如何使用 PEM 格式的 RSA 密钥对进行加密和解密操作: ```c #include <openssl/evp.h> #include <openssl/pem.h> int rsa_encrypt(const unsigned char *plaintext, int plaintext_len, unsigned char *ciphertext, EVP_PKEY *pubkey) { EVP_PKEY_CTX *ctx; size_t ciphertext_len; int rc; ctx = EVP_PKEY_CTX_new(pubkey, NULL); if (!ctx) { return -1; } rc = EVP_PKEY_encrypt_init(ctx); if (rc != 1) { EVP_PKEY_CTX_free(ctx); return -1; } rc = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING); if (rc != 1) { EVP_PKEY_CTX_free(ctx); return -1; } rc = EVP_PKEY_encrypt(ctx, ciphertext, &ciphertext_len, plaintext, plaintext_len); if (rc != 1) { EVP_PKEY_CTX_free(ctx); return -1; } EVP_PKEY_CTX_free(ctx); return ciphertext_len; } int rsa_decrypt(const unsigned char *ciphertext, int ciphertext_len, unsigned char *plaintext, EVP_PKEY *privkey) { EVP_PKEY_CTX *ctx; size_t plaintext_len; int rc; ctx = EVP_PKEY_CTX_new(privkey, NULL); if (!ctx) { return -1; } rc = EVP_PKEY_decrypt_init(ctx); if (rc != 1) { EVP_PKEY_CTX_free(ctx); return -1; } rc = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING); if (rc != 1) { EVP_PKEY_CTX_free(ctx); return -1; } rc = EVP_PKEY_decrypt(ctx, plaintext, &plaintext_len, ciphertext, ciphertext_len); if (rc != 1) { EVP_PKEY_CTX_free(ctx); return -1; } EVP_PKEY_CTX_free(ctx); return plaintext_len; } ``` 这里 `rsa_encrypt` 函数使用给定的公钥对一个数据进行加密,并返回密文的长度。`rsa_decrypt` 函数使用给定的私钥对一个密文进行解密,并返回明文的长度。注意,这些函数仅适用于 RSA_PKCS1_OAEP_PADDING 填充模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值