关于RSA PEM文件格式
PEM私钥格式文件
PEM公钥格式文件
PEM RSAPublicKey公钥格式文件
关于0xC0000005: 读取位置 xxx时发生访问冲突
区别: RSA_private_decrypt and RSA_private_encrypt
PEM私钥格式文件
PEM公钥格式文件
PEM RSAPublicKey公钥格式文件
关于0xC0000005: 读取位置 xxx时发生访问冲突
区别: RSA_private_decrypt and RSA_private_encrypt
OpenSSL 内置的API的类型和方法有很多,实现同一个功能的有很多API,要搞清这些API的用法和区别还是要时间的,因为不同的API的具体用法还是要自己去试试的
总结一下坑点:
- openssl的RSA两种公钥格式
需要不同的API来读取
在用命令行生成的时候需要加上不同的选项 - 关于MD5生成
好像有两种,有一种比较复杂:
有init()、update()、还有一个结束的函数,忘了名字
我用的是简单的实现,就是一个MD5(),看网上,这个简单的函数底层也是调用上面复杂的函数实现的
而且在进行MD5生成的时候,用sizeof和strlen的结果都可能是不同的
- 关于RSA加解密问题
因为RSA加密16字节,得到的是128字节的密文,所以在接收和发送的时候需要进行注意接收的大小、分块加密发送、和接收数组的大小问题 - 在RSA加解密函数返回-1的可能
- 数组的大小不对
- 加密解密的密钥不配对
- AES加密的时候不是直接使用16字节的随机数组
OpenSSl中提供了根据16字节数组生成AES加密解密的AES结构体
在进行AES加解密的时候就是使用这个结构体 - 个人感觉 OpenSSL的稳定性不是特别好
有时候会出现一些问题
关于RSA PEM文件格式
PEM私钥格式文件
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
PEM公钥格式文件
-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
提取PEM格式公钥:
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
-in 指定输入的密钥文件
-out 指定提取生成公钥的文件(PEM RSAPublicKey格式)
API:
//从BIO重加载PublicKey格式公钥证书
RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x, pem_password_cb *cb, void *u);
PEM RSAPublicKey公钥格式文件
-----BEGIN RSA PUBLIC KEY-----
-----END RSA PUBLIC KEY-----
提取:
openssl rsa -in key.pem -RSAPublicKey_out -out pubkey.pem
-in 指定输入的密钥文件
-out 指定提取生成公钥的文件(PEM RSAPublicKey格式)
API:
//从BIO重加载RSAPublicKey格式公钥证书
RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x, pem_password_cb *cb, void *u);
关于0xC0000005: 读取位置 xxx时发生访问冲突
一般都是指针的问题
- 申请的内存没有释放
- 出现死循环导致内存泄露
- 所有的第三方类库存在内存泄露相关的BUG
常见的溢出主要有:
- 内存分配未成功,却使用了它
- 内存分配虽然成功,但是尚未初始化就引用它。
- 内存分配成功并且已经初始化,但操作越过了内存的边界。
- 使用free 或delete 释放了内存后,没有将指针设置为NULL。导致产生“野指针”。
区别: RSA_private_decrypt and RSA_private_encrypt
- 没有padding的时候,这两个函数是相同的
- 指定padding之后,RSA_private_encrypt会在模指数运算之前加上padding;RSA_private_decrypt会在模指数运算之后剪掉padding