zoukankan      html  css  js  c++  java
  • OpenSSL坑点记录

    TOC

    OpenSSL 内置的API的类型和方法有很多,实现同一个功能的有很多API,要搞清这些API的用法和区别还是要时间的,因为不同的API的具体用法还是要自己去试试的

    总结一下坑点:

    • openssl的RSA两种公钥格式
      需要不同的API来读取
      在用命令行生成的时候需要加上不同的选项
    • 关于MD5生成
      好像有两种,有一种比较复杂:
      有init()、update()、还有一个结束的函数,忘了名字

    我用的是简单的实现,就是一个MD5(),看网上,这个简单的函数底层也是调用上面复杂的函数实现的

    而且在进行MD5生成的时候,用sizeof和strlen的结果都可能是不同的

    • 关于RSA加解密问题
      因为RSA加密16字节,得到的是128字节的密文,所以在接收和发送的时候需要进行注意接收的大小、分块加密发送、和接收数组的大小问题
    • 在RSA加解密函数返回-1的可能
    1. 数组的大小不对
    2. 加密解密的密钥不配对
    • 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
  • 相关阅读:
    简而言之C语言:“char类型省空间”只是一个传说
    原来曾经有人支持过我,感动!
    编程的“武林秘籍”
    没有一种语言解决所有问题
    简而言之C语言:const声明
    关于代码的些许感想
    树莓派上搭建arduino命令行开发环境
    IOT设备的7大安全问题
    OsmocomBB软件实现栈概况
    Win7以上 32/64位系统隐藏托盘图标
  • 原文地址:https://www.cnblogs.com/volva/p/11815202.html
Copyright © 2011-2022 走看看