中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

域名 網(wǎng)站/站長之家網(wǎng)站介紹

域名 網(wǎng)站,站長之家網(wǎng)站介紹,網(wǎng)頁被禁止訪問,wordpress 修改footer文章目錄 一、openssl對稱加密和非對稱加密算法對比1. 加密原理2. 常用算法3. 加密速度4. 安全性5. 應(yīng)用場景6. 優(yōu)缺點對比綜合分析 二、代碼實戰(zhàn)代碼說明:運行輸出示例代碼說明:注意事項 一、openssl對稱加密和非對稱加密算法對比 OpenSSL 是一個廣泛使…

文章目錄

  • 一、openssl對稱加密和非對稱加密算法對比
      • 1. 加密原理
      • 2. 常用算法
      • 3. 加密速度
      • 4. 安全性
      • 5. 應(yīng)用場景
      • 6. 優(yōu)缺點對比
      • 綜合分析
  • 二、代碼實戰(zhàn)
      • 代碼說明:
      • 運行輸出示例
      • 代碼說明:
      • 注意事項


一、openssl對稱加密和非對稱加密算法對比

OpenSSL 是一個廣泛使用的加密庫,提供了豐富的對稱加密和非對稱加密算法。這兩類加密方式各有不同的特點和適用場景。以下是兩者的對比:

1. 加密原理

  • 對稱加密

    • 使用相同的密鑰進行加密和解密。
    • 密鑰在加密和解密雙方之間共享,因此需要一個安全的密鑰傳輸方式。
    • 加密速度較快,適合加密大量數(shù)據(jù)。
  • 非對稱加密

    • 使用一對密鑰:公鑰和私鑰。公鑰用于加密,私鑰用于解密。
    • 公鑰可以公開,私鑰則需要保護,只有擁有私鑰的人才能解密公鑰加密的數(shù)據(jù)。
    • 適合小數(shù)據(jù)量加密和簽名,但處理大數(shù)據(jù)效率較低。

2. 常用算法

  • 對稱加密算法(在 OpenSSL 中支持的常見算法):

    • AES(高級加密標準):流行且安全的對稱加密算法,支持 128、192 和 256 位密鑰長度。
    • SM4:主要用于中國的商用密碼標準,采用 128 位密鑰。
    • DES 和 3DES(數(shù)據(jù)加密標準及三重數(shù)據(jù)加密標準):早期的加密算法,但已不再安全,較少使用。
  • 非對稱加密算法(在 OpenSSL 中支持的常見算法):

    • RSA:廣泛使用的非對稱算法,密鑰長度通常為 2048 或 4096 位。
    • ECC(橢圓曲線加密):基于橢圓曲線的加密,密鑰較短但安全性高,用于資源受限的環(huán)境。
    • DSA(數(shù)字簽名算法):主要用于簽名,常見于數(shù)字證書。

3. 加密速度

  • 對稱加密

    • 對稱加密算法如 AES 在處理速度上顯著優(yōu)于非對稱加密,非常適合大文件或大量數(shù)據(jù)的加密。
    • 常用于文件加密、數(shù)據(jù)存儲、網(wǎng)絡(luò)數(shù)據(jù)傳輸加密等場景。
  • 非對稱加密

    • 非對稱加密算法處理速度慢,因為其運算更為復(fù)雜,適合小數(shù)據(jù)量的加密,如數(shù)字簽名和密鑰交換。
    • 在實際應(yīng)用中,通常將其與對稱加密結(jié)合使用,通過非對稱加密傳輸對稱密鑰來實現(xiàn)安全的密鑰交換,后續(xù)的數(shù)據(jù)傳輸則使用對稱加密。

4. 安全性

  • 對稱加密

    • 安全性依賴于密鑰長度和算法設(shè)計;例如,AES-256 被認為是非常安全的對稱加密算法。
    • 密鑰必須在傳輸中保持安全,一旦密鑰泄露,數(shù)據(jù)的機密性將受到威脅。
  • 非對稱加密

    • 安全性依賴于密鑰長度和密鑰保護。比如 RSA-2048 被認為是安全的,而 ECC 則以較短密鑰提供更高安全性。
    • 私鑰的安全性至關(guān)重要,如果私鑰泄露,任何持有公鑰的人都可以解密數(shù)據(jù)。

5. 應(yīng)用場景

  • 對稱加密的應(yīng)用場景

    • 用于 HTTPS 中的數(shù)據(jù)加密(結(jié)合非對稱加密交換密鑰后)。
    • 云存儲、數(shù)據(jù)庫等大文件的加密保護。
    • VPN、WiFi 等網(wǎng)絡(luò)傳輸中對數(shù)據(jù)的加密。
  • 非對稱加密的應(yīng)用場景

    • 數(shù)字簽名,用于認證數(shù)據(jù)的來源和完整性。
    • SSL/TLS 協(xié)議中,用于加密對稱加密密鑰并驗證通信雙方身份。
    • 數(shù)據(jù)加密用于保護敏感信息的小文件,例如加密密碼、密鑰或數(shù)字證書。

6. 優(yōu)缺點對比

對比項目對稱加密非對稱加密
密鑰數(shù)量1 個密鑰,共享密鑰1 對密鑰(公鑰和私鑰)
加密速度快,適合大數(shù)據(jù)慢,適合小數(shù)據(jù)
安全性密鑰泄露會導(dǎo)致數(shù)據(jù)泄密公鑰泄露不會影響數(shù)據(jù)的私密性
密鑰分配需要安全的密鑰傳輸私鑰無需傳輸,安全性更高
典型應(yīng)用大數(shù)據(jù)文件的加密、VPN、存儲加密SSL/TLS、數(shù)字簽名、密鑰交換

綜合分析

OpenSSL 中通常結(jié)合對稱加密和非對稱加密,以實現(xiàn)性能與安全性兼?zhèn)涞募用芊桨?。例?#xff0c;在 SSL/TLS 協(xié)議中,服務(wù)器會先使用非對稱加密交換密鑰,然后使用對稱加密傳輸數(shù)據(jù)。

二、代碼實戰(zhàn)

下面是使用 OpenSSL 實現(xiàn)對稱加密的示例代碼,采用 AES-256-CBC 算法對數(shù)據(jù)進行加密。此代碼會生成一個隨機的初始向量(IV),并且使用固定的密鑰對數(shù)據(jù)加密。

#include <openssl/evp.h>
#include <openssl/rand.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>#define AES_KEY_LENGTH 32  // AES-256, so 256 bits = 32 bytes
#define AES_BLOCK_SIZE 16void handleErrors() {ERR_print_errors_fp(stderr);abort();
}// 對稱加密函數(shù)
int aes_encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,unsigned char *iv, unsigned char *ciphertext) {EVP_CIPHER_CTX *ctx;int len;int ciphertext_len;// 創(chuàng)建并初始化上下文if (!(ctx = EVP_CIPHER_CTX_new())) handleErrors();// 初始化加密操作,指定 AES-256-CBC 算法if (1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)) handleErrors();// 加密數(shù)據(jù)if (1 != EVP_EncryptUpdate(ctx, ciphertext, &len, plaintext, plaintext_len))handleErrors();ciphertext_len = len;// 完成加密if (1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &len)) handleErrors();ciphertext_len += len;// 釋放上下文EVP_CIPHER_CTX_free(ctx);return ciphertext_len;
}int main() {// 32 字節(jié)的密鑰 (256 位)unsigned char key[AES_KEY_LENGTH] = "0123456789abcdef0123456789abcdef";// 生成 16 字節(jié)的初始向量 (128 位)unsigned char iv[AES_BLOCK_SIZE];if (!RAND_bytes(iv, AES_BLOCK_SIZE)) {fprintf(stderr, "隨機生成初始向量失敗\n");return 1;}unsigned char plaintext[] = "This is the data to encrypt";  // 要加密的數(shù)據(jù)unsigned char ciphertext[128];  // 存儲密文的緩沖區(qū)// 執(zhí)行加密操作int ciphertext_len = aes_encrypt(plaintext, strlen((char *)plaintext), key, iv, ciphertext);// 打印初始向量printf("Initial Vector (IV): ");for (int i = 0; i < AES_BLOCK_SIZE; i++) {printf("%02x ", iv[i]);}printf("\n");// 打印加密后的數(shù)據(jù)(密文)printf("Ciphertext (hex): ");for (int i = 0; i < ciphertext_len; i++) {printf("%02x ", ciphertext[i]);}printf("\n");return 0;
}

代碼說明:

  • 初始化加密上下文:使用 EVP_CIPHER_CTX_new() 創(chuàng)建加密上下文。
  • 設(shè)置加密算法和密鑰:通過 EVP_EncryptInit_ex() 指定 AES-256-CBC 算法。
  • 加密數(shù)據(jù)EVP_EncryptUpdate() 用于加密數(shù)據(jù)塊。
  • 完成加密EVP_EncryptFinal_ex() 處理最后的數(shù)據(jù)塊。
  • 生成隨機初始向量(IV)RAND_bytes() 生成隨機 IV,確保加密的安全性。

運行輸出示例

Initial Vector (IV): 1a 2b 3c 4d ... (隨機生成)
Ciphertext (hex): ae f5 67 89 ... (加密后的密文)

注意:密鑰和初始向量(IV)應(yīng)安全存儲,并且應(yīng)僅與需要解密的接收方共享。

這是對應(yīng)解密代碼,解密前需要與加密代碼相同的密鑰和初始向量(IV),用相同的算法參數(shù)對密文進行解密:

#include <openssl/evp.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>#define AES_KEY_LENGTH 32  // 256 位密鑰
#define AES_BLOCK_SIZE 16  // AES 塊大小 128 位(16 字節(jié))void handleErrors() {ERR_print_errors_fp(stderr);abort();
}// 對稱解密函數(shù)
int aes_decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,unsigned char *iv, unsigned char *plaintext) {EVP_CIPHER_CTX *ctx;int len;int plaintext_len;// 創(chuàng)建并初始化上下文if (!(ctx = EVP_CIPHER_CTX_new())) handleErrors();// 初始化解密操作,使用 AES-256-CBC 算法if (1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)) handleErrors();// 提供待解密的數(shù)據(jù)if (1 != EVP_DecryptUpdate(ctx, plaintext, &len, ciphertext, ciphertext_len))handleErrors();plaintext_len = len;// 完成解密操作if (1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &len)) handleErrors();plaintext_len += len;// 清理上下文EVP_CIPHER_CTX_free(ctx);return plaintext_len;
}int main() {// 密鑰和 IV 與加密時保持一致unsigned char key[AES_KEY_LENGTH] = "0123456789abcdef0123456789abcdef";unsigned char iv[AES_BLOCK_SIZE] = {0x1a, 0x2b, 0x3c, 0x4d, 0x5e, 0x6f, 0x7a, 0x8b,0x9c, 0xad, 0xbe, 0xcf, 0xde, 0xef, 0xfa, 0x1b};unsigned char ciphertext[] = {0xae, 0xf5, 0x67, 0x89, /* ... 加密數(shù)據(jù)的字節(jié)數(shù)組 */};unsigned char decryptedtext[128];  // 緩沖區(qū)用于存儲解密后的明文// 執(zhí)行解密操作int decryptedtext_len = aes_decrypt(ciphertext, sizeof(ciphertext), key, iv, decryptedtext);// 添加字符串終止符decryptedtext[decryptedtext_len] = '\0';// 輸出解密后的明文printf("Decrypted text: %s\n", decryptedtext);return 0;
}

代碼說明:

  • 初始化解密上下文:使用 EVP_CIPHER_CTX_new() 創(chuàng)建解密上下文。
  • 設(shè)置解密算法和密鑰:通過 EVP_DecryptInit_ex() 指定 AES-256-CBC 算法。
  • 解密數(shù)據(jù)EVP_DecryptUpdate() 用于處理密文的主要部分。
  • 完成解密EVP_DecryptFinal_ex() 處理最后的數(shù)據(jù)塊,并將明文長度加到總長度中。
  • 輸出解密結(jié)果:解密后的數(shù)據(jù)存儲在 decryptedtext 中,作為原始的明文數(shù)據(jù)輸出。

注意事項

  • 密鑰和初始向量(IV)必須與加密時一致。
  • 輸出的解密文本會和加密前的原始文本一致。
http://www.risenshineclean.com/news/771.html

相關(guān)文章:

  • 蘿崗區(qū)營銷型網(wǎng)站建設(shè)/少兒編程培訓(xùn)機構(gòu)排名前十
  • WordPress頂部廣告插件/seo搜索優(yōu)化專員
  • 惠州關(guān)鍵詞排名提升/河北seo推廣
  • 京東網(wǎng)站制作優(yōu)點/網(wǎng)站數(shù)據(jù)分析案例
  • 微信公眾號人工客服電話轉(zhuǎn)人工/南陽網(wǎng)站優(yōu)化公司
  • 怎么做論壇的網(wǎng)站/附近電腦培訓(xùn)速成班一個月
  • 做的網(wǎng)站圖片顯示一半/今日熱點事件
  • 做一款什么網(wǎng)站賺錢/2023免費推廣入口
  • 豬八戒網(wǎng)怎么做網(wǎng)站/電商運營培訓(xùn)班
  • 高端營銷網(wǎng)站建設(shè)/常見的網(wǎng)絡(luò)營銷手段
  • 手機網(wǎng)站教程/seo工程師招聘
  • 集運網(wǎng)站建設(shè)/產(chǎn)品推廣策略怎么寫
  • 怎么做圖片網(wǎng)站/今日最新消息新聞報道
  • 建設(shè)公安網(wǎng)站的申請/太原百度關(guān)鍵詞排名
  • 電子商務(wù)網(wǎng)站建設(shè)的方法與流程/seo推廣是什么意懌
  • 陜西建設(shè)網(wǎng)官方網(wǎng)站/鄭州seo線下培訓(xùn)
  • 做旅游宣傳哪個網(wǎng)站好/網(wǎng)站開發(fā)軟件有哪些
  • 什么網(wǎng)站做網(wǎng)頁好/站長之家ip地址查詢
  • 宣傳類的網(wǎng)站怎么做/廣告軟文代理平臺
  • 企業(yè)網(wǎng)站改自適應(yīng)/班級優(yōu)化大師電腦版
  • 一個公司設(shè)計網(wǎng)站怎么做/京東seo搜索優(yōu)化
  • wordpress在線音樂/seo狂人
  • 上海最好的網(wǎng)站建設(shè)公司/百度競價推廣方案
  • 做網(wǎng)站哪個語言強/好項目推薦平臺
  • 網(wǎng)絡(luò)營銷與傳統(tǒng)營銷有哪些區(qū)別/windows優(yōu)化大師可以卸載嗎
  • 鶴壁做網(wǎng)站優(yōu)化/aso優(yōu)化榜單
  • 如何做企業(yè)網(wǎng)站推廣產(chǎn)品/iis搭建網(wǎng)站
  • 網(wǎng)絡(luò)營銷方式和平臺推廣/搜索引擎優(yōu)化的目的是
  • 天津武清做網(wǎng)站tjniu/產(chǎn)品互聯(lián)網(wǎng)營銷推廣
  • 海報設(shè)計網(wǎng)站官網(wǎng)/百度怎么做廣告