• OpenSSL API


    TOC

    BN大数系列函数

    //新生成一个BIGNUM结构
    BIGNUM *BN_new(void);
    
    //释放一个BIGNUM结构,释放完后a=NULL;
    void BN_free(BIGNUM *a);
    
    //初始化所有项均为0,一般为BN_ init(&c)
    void BN_init(BIGNUM *);
    
    //将a中所有项均赋值为0,但是内存并没有释放
    void BN_clear(BIGNUM *a);
    
    //相当与将BN_free和BN_clear综合,要不就赋值0,要不就释放空间。
    void BN_clear_free(BIGNUM *a);
    
    //设置大数a为整数w
    int BN_set_word(BIGNUM *a, unsigned long w);
    
    //假如大数a能表示为long型,那么返回一个long型数
    unsigned long BN_get_word(BIGNUM *a);
    
    //产生一个加密用的强bits的伪随机数
    //若top=-1,最高位为0,top=0,最高位为1,top=1,最高位和次高位为1,bottom为真,随机数为偶数
    int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
    
    //将 a 转化为字符串存入to,to的空间必须大于BN_num_bytes(a)
    int BN_bn2bin(const BIGNUM *a, unsigned char *to);
    
    //将s中的len位的正整数转化为大数
    BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); 
    
    //将大数转化为16进制字符串
    char *BN_bn2hex(const BIGNUM *a);
    
    //将大数转化为10进制字符串
    char *BN_bn2dec(const BIGNUM *a);
    
    //将16进制字符串转成大数
    int BN_hex2bn(BIGNUM **a, const char *str);
    
    //将10进制字符串传成大数
    int BN_dec2bn(BIGNUM **a, const char *str);

    【公钥对象PUBKEY的IO】

    EVP_PKEY *PEM_read_bio_PUBKEY(BIO *bp, EVP_PKEY **x,pem_password_cb *cb, void *u);
    EVP_PKEY *PEM_read_PUBKEY(FILE *fp, EVP_PKEY **x,pem_password_cb *cb, void *u);
    int PEM_write_bio_PUBKEY(BIO *bp, EVP_PKEY *x);
    int PEM_write_PUBKEY(FILE *fp, EVP_PKEY *x);
    这四个函数对EVP_PKEY结构的公钥进行PEM格式的读写处理。公钥是作为SubjectPublicKeyInfo存储结构进行编码的。
    

    【RSA私钥对象RSAPrivateKey的IO】

    RSA *PEM_read_bio_RSAPrivateKey(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
    RSA *PEM_read_RSAPrivateKey(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
    int PEM_write_bio_RSAPrivateKey(BIO *bp, RSA *x, const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *cb, void *u);
    int PEM_write_RSAPrivateKey(FILE *fp, RSA *x, const EVP_CIPHER *enc,unsigned char *kstr, int klen,pem_password_cb *cb, void *u);

    这四个函数对RSA结构的RSA私钥进行PEM格式的读写处理。它使用跟PrivateKey相同的函数进行处理,但如果私钥类型不是RSA,就会返回错误信息。

    【RSA公钥对象RSAPublicKey的IO】

    RSA *PEM_read_bio_RSAPublicKey(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
    RSA *PEM_read_RSAPublicKey(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
    int PEM_write_bio_RSAPublicKey(BIO *bp, RSA *x);
    int PEM_write_RSAPublicKey(FILE *fp, RSA *x);

    这四个函数是对RSA结构的公钥进行PEM格式的读写处理。本函数使用PKCS#1 RSAPublicKey结构标准对RSA公钥进行编码操作。

    【RSA公钥对象RSA_PUBKEY的IO】

    RSA *PEM_read_bio_RSA_PUBKEY(BIO *bp, RSA **x,pem_password_cb *cb, void *u);
    
    RSA *PEM_read_RSA_PUBKEY(FILE *fp, RSA **x,pem_password_cb *cb, void *u);
    
    int PEM_write_bio_RSA_PUBKEY(BIO *bp, RSA *x);
    
    int PEM_write_RSA_PUBKEY(FILE *fp, RSA *x);
    这四个函数也是对RSA结构的公钥进行PEM格式的读写处理。但是本函数使用SubjectPublicKeyInfo结构标准对RSA公钥进行编码操作,如果公钥类型不是RSA,就出错返回失败信息。
    
  • 相关阅读:
    改变传统电视对客厅文化的影响
    移动终端三分天下 何与争峰
    全球移动IM应用的迅猛发展前景
    电子医疗的发展和实现
    poj 1523(无向图求割点)
    poj 3255(次短路)
    poj 2125
    poj 3204
    图的连通度问题的求法(转)
    poj 3308
  • 原文地址:https://www.cnblogs.com/volva/p/11815231.html
Copyright © 2020-2023  润新知