关于OPENSSL 实现 RSA加密几个问题

时间:2021-02-11 10:11:46

先用前人总结的RSA相关的资料介绍下:

一. RSA PEM文件格式

1. PEM私钥格式文件

12 -----BEGIN
RSA PRIVATE KEY-----
-----END
RSA PRIVATE KEY-----

2. PEM公钥格式文件

12 -----BEGIN
PUBLIC KEY-----
-----END
PUBLIC KEY-----

3. PEM RSAPublicKey公钥格式文件

12 -----BEGIN
RSA PUBLIC KEY-----
-----END
RSA PUBLIC KEY-----

二. OpenSSL密钥相关命令

1. 生成密钥

123 openssl
genrsa -out key.pem 1024
    -out 指定生成文件,此文件包含公钥和私钥两部分,所以即可以加密,也可以解密    1024 生成密钥的长度

2. 提取PEM格式公钥

123 openssl
rsa -in key.pem -pubout -out pubkey.pem
    -in 指定输入的密钥文件    -out 指定提取生成公钥的文件(PEM公钥格式)

3. 提取PEM RSAPublicKey格式公钥

123 openssl
rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
    -in 指定输入的密钥文件    -out 指定提取生成公钥的文件(PEM RSAPublicKey格式)

4. 公钥加密文件

12345 openssl
rsautl -encrypt -in input.file -inkey pubkey.pem -pubin -out output.file
    -in 指定被加密的文件    -inkey 指定加密公钥文件    -pubin 表面是用纯公钥文件加密    -out 指定加密后的文件

5. 私钥解密文件

1234 openssl
rsautl -decrypt -in input.file -inkey key.pem -out output.file
    -in 指定需要解密的文件    -inkey 指定私钥文件    -out 指定解密后的文件


那么问题来了:

问题一:PEM_read_RSA_PUBKEY和PEM_read_RSAPublicKey,大多数人都分不清区别,看上面分别是不同的功能,读

不同格式的公钥。所以不能混用,否则会运行失败。

PEM_read_RSA_PUBKEY 读PEM公钥

PEM_read_RSAPublicKey读 RSAPublicKey

问题二:上面对应的读取函数对了为什么,还是运行就出错了呢

intPEM_write_RSAPublicKey(FILE*fp, RSA *x);文件指针使用fopen打开。国外网站说是fopen

的C库版本和openssl编译c库不一样运行就导致兼容性出错了。请确保在同一台机器编译好openssl,同一台

机器使用。

问题三:既然以上两点都注意了还错,那就是版本问题了,32位环境编译的在32位工程里面用,64位的在64位里面用

Debug版本用Debug的项目,Release版本用Release的项目。混用了要不然编译不过,要不然会运行闪退。