openssl evp RSA 加密解密

來源:互聯網
上載者:User

標籤:數字   open   free   http   .com   代碼   char   encrypt   tar   

openssl evp RSA 加密解密

可以直接使用RSA.h 提供的介面

如下測試使用EVP提供的RSA介面

1. EVP提供的RSA 加密解密

  主要介面:

int EVP_PKEY_encrypt_init(EVP_PKEY_CTX *ctx);int EVP_PKEY_encrypt(EVP_PKEY_CTX *ctx,                     unsigned char *out, size_t *outlen,                     const unsigned char *in, size_t inlen);int EVP_PKEY_decrypt_init(EVP_PKEY_CTX *ctx);int EVP_PKEY_decrypt(EVP_PKEY_CTX *ctx,                     unsigned char *out, size_t *outlen,                     const unsigned char *in, size_t inlen);

   測試代碼

   先產生 EVP_KEY 

    //產生金鑰組    RSA *r = RSA_new();    int bits = 512;    BIGNUM *e = BN_new();    BN_set_word(e, 65537);    RSA_generate_key_ex(r, bits, e, NULL);    EVP_PKEY *key;    key = EVP_PKEY_new();    EVP_PKEY_set1_RSA(key, r);

  測試加密解密 

    //預設使用的是 RSA_PKCS1_PADDING,即這裡最大加密塊為64-11=53,大量數組需要分組處理    char *srcStr = "01234567890123456789012345678901234567890123456789123";    //char *srcStr = "hello world";    int enclen = 0;    char encData[1024] = {0};    char decData[1024] = {0};    int declen = 0;    printf("src=%s\n",srcStr);            //加密    EVP_PKEY_CTX *ectx;    ectx = EVP_PKEY_CTX_new(key, NULL);    EVP_PKEY_encrypt_init(ectx);    EVP_PKEY_encrypt(ectx, encData, &enclen, srcStr, strlen(srcStr));            //解密    EVP_PKEY_CTX *dctx;    dctx = EVP_PKEY_CTX_new(key, NULL);    EVP_PKEY_decrypt_init(dctx);    EVP_PKEY_decrypt(dctx, decData, &declen, encData, enclen);    printf("dec=%s\n",decData);    EVP_PKEY_CTX_free(ectx);    EVP_PKEY_CTX_free(dctx);        EVP_PKEY_free(key);    BN_free(e);    RSA_free(r);

 執行結果:

src=01234567890123456789012345678901234567890123456789123dec=01234567890123456789012345678901234567890123456789123Program ended with exit code: 0
View Code

 

 上述測試也是RSA的區塊編碼器,如果加密資料比較長的時候,需要多次調用;

 補位方式:RSA_PKCS1_PADDING 則,最大分組真為RSA_size(r) -11 

 

 2. 另外evp提供的簽名與驗簽介面還有

int EVP_PKEY_sign_init(EVP_PKEY_CTX *ctx);int EVP_PKEY_sign(EVP_PKEY_CTX *ctx,                  unsigned char *sig, size_t *siglen,                  const unsigned char *tbs, size_t tbslen);int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);int EVP_PKEY_verify(EVP_PKEY_CTX *ctx,                    const unsigned char *sig, size_t siglen,                    const unsigned char *tbs, size_t tbslen);int EVP_PKEY_verify_recover_init(EVP_PKEY_CTX *ctx);int EVP_PKEY_verify_recover(EVP_PKEY_CTX *ctx,                            unsigned char *rout, size_t *routlen,                            const unsigned char *sig, size_t siglen);

 

3.  關於數位信封,簽名信封,開啟信封介面

__owur int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,                        const unsigned char *ek, int ekl,                        const unsigned char *iv, EVP_PKEY *priv);__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);__owur int EVP_SealInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,                        unsigned char **ek, int *ekl, unsigned char *iv,                        EVP_PKEY **pubk, int npubk);__owur int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl);

 

 

參考:https://www.openssl.org/docs/man1.1.0/crypto/EVP_PKEY_encrypt.html

https://www.openssl.org/docs/man1.1.0/crypto/EVP_PKEY_verify.html

openssl evp RSA 加密解密

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.