openssl加密算法简介

文章目录

  • 一、openssl概述
      • [1. **对称加密算法 (Symmetric Encryption)**](#1. 对称加密算法 (Symmetric Encryption))
        • [示例代码(AES CBC 加密)](#示例代码(AES CBC 加密))
      • [2. **非对称加密算法 (Asymmetric Encryption)**](#2. 非对称加密算法 (Asymmetric Encryption))
        • [示例代码(RSA 加密)](#示例代码(RSA 加密))
      • [3. **哈希算法 (Hashing Algorithms)**](#3. 哈希算法 (Hashing Algorithms))
        • [示例代码(SHA256 哈希)](#示例代码(SHA256 哈希))
      • [4. **消息认证码 (MAC)**](#4. 消息认证码 (MAC))
      • [5. **数字签名 (Digital Signatures)**](#5. 数字签名 (Digital Signatures))
      • [OpenSSL 编程接口](#OpenSSL 编程接口)
      • 总结
  • 二、密钥、公钥、证书、初始向量(IV)的概念
      • [1. 密钥(Key)](#1. 密钥(Key))
      • [2. 公钥(Public Key)和私钥(Private Key)](#2. 公钥(Public Key)和私钥(Private Key))
      • [3. 证书(Certificate)](#3. 证书(Certificate))
      • [4. 初始向量(IV)](#4. 初始向量(IV))
      • 总结

一、openssl概述

OpenSSL 是一个广泛使用的开源加密库,它支持多种加密算法,提供了加密、解密、证书管理、哈希运算等功能。OpenSSL 支持对称加密、非对称加密、哈希算法、消息认证码等不同类型的加密算法。

以下是 OpenSSL 中一些常见的加密算法的简要介绍:

1. 对称加密算法 (Symmetric Encryption)

对称加密算法使用相同的密钥进行加密和解密。加密和解密过程是相反的,密钥必须保密,因为任何知道密钥的人都能进行加解密。常见的对称加密算法包括:

  • AES (Advanced Encryption Standard):

    • 是当前最常用的对称加密算法,支持 128 位、192 位和 256 位密钥。
    • 工作模式有 ECB、CBC、CFB、OFB 等。CBC(Cipher Block Chaining)是其中一种常用模式,它使用一个初始向量(IV)来增强加密强度。
  • DES (Data Encryption Standard):

    • 曾经广泛使用,但由于密钥长度仅为 56 位,现在被认为不安全。
    • DES 已被 AES 替代,但它仍然可以用于学习和兼容性目的。
  • 3DES (Triple DES):

    • 是对 DES 算法的改进,使用三个 DES 加密操作来提高安全性,虽然比 DES 更安全,但相对较慢。
  • SM4 (Chinese National Standard):

    • SM4 是中国国家标准对称加密算法,主要用于加密处理,常见于金融、电信等领域。它支持 128 位密钥和块大小。
  • RC4 (Rivest Cipher 4):

    • 一种流加密算法,使用一个密钥流来加密数据,曾被广泛使用,但由于其安全性问题,现已不再推荐使用。
示例代码(AES CBC 加密)
c 复制代码
EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv);

2. 非对称加密算法 (Asymmetric Encryption)

非对称加密算法使用一对密钥:一个公钥和一个私钥。公钥用于加密,私钥用于解密。私钥不能从公钥推算出来,这使得非对称加密非常适合用于密钥交换和数字签名。

  • RSA (Rivest-Shamir-Adleman):

    • 是最常见的非对称加密算法,广泛应用于数据加密、数字签名等场景。
    • RSA 的安全性基于大整数分解问题。
  • ECDSA (Elliptic Curve Digital Signature Algorithm):

    • 基于椭圆曲线的数字签名算法,比 RSA 更高效,通常用于低功耗设备或移动应用。
  • DH (Diffie-Hellman):

    • 用于密钥交换,使得两方可以安全地在不安全的通道中共享密钥。
  • DSA (Digital Signature Algorithm):

    • 用于生成数字签名,常用于身份验证和数据完整性验证。
示例代码(RSA 加密)
c 复制代码
EVP_EncryptInit_ex(ctx, EVP_rsa_sign(), NULL, pub_key, NULL);

3. 哈希算法 (Hashing Algorithms)

哈希算法将任意长度的输入(消息)转换为固定长度的输出(哈希值)。哈希值用于验证数据完整性和生成签名。常见的哈希算法包括:

  • MD5 (Message Digest Algorithm 5):

    • 输出 128 位的哈希值,曾经非常流行,但由于碰撞攻击,现已不再推荐用于安全应用。
  • SHA (Secure Hash Algorithm):

    • SHA 系列包括 SHA-1、SHA-256、SHA-512 等,其中 SHA-256 和 SHA-512 目前仍然是广泛使用的安全哈希算法。
  • HMAC (Hash-based Message Authentication Code):

    • 使用哈希算法与密钥结合生成消息认证码,提供消息完整性和认证。
示例代码(SHA256 哈希)
c 复制代码
EVP_DigestInit_ex(ctx, EVP_sha256(), NULL);

4. 消息认证码 (MAC)

消息认证码是一种通过密钥和数据生成的"签名",它用于验证消息的完整性和来源。HMAC 是一种常用的 MAC,基于哈希算法和密钥。

5. 数字签名 (Digital Signatures)

数字签名用于验证消息的来源和完整性。通常使用非对称加密算法来生成和验证签名。发送方使用私钥签名数据,接收方使用公钥验证签名。

OpenSSL 编程接口

OpenSSL 提供了一组强大的 API 用于加密、解密、哈希计算、数字签名等操作。常见的函数如下:

  • EVP_EncryptInit_ex(), EVP_EncryptUpdate(), EVP_EncryptFinal_ex() --- 用于加密。
  • EVP_DecryptInit_ex(), EVP_DecryptUpdate(), EVP_DecryptFinal_ex() --- 用于解密。
  • EVP_DigestInit_ex(), EVP_DigestUpdate(), EVP_DigestFinal_ex() --- 用于哈希计算。

总结

OpenSSL 支持各种加密算法,用于数据加密、数字签名、身份验证等多种场景。它提供了灵活且强大的 API,允许开发人员实现多种加密方案。常见的加密方法包括对称加密(如 AES、SM4)、非对称加密(如 RSA、ECDSA)、哈希算法(如 SHA、MD5)等。

二、密钥、公钥、证书、初始向量(IV)的概念

在加密和安全通信中,密钥、公钥、证书、初始向量(IV)是常见且重要的概念。它们分别在不同加密场景中扮演不同角色。以下是这些概念的详细讲解:

1. 密钥(Key)

密钥是一个用于加密和解密的核心机密值。它可以是对称密钥或非对称密钥。

  • 对称密钥:加密和解密使用相同的密钥,常用于对称加密算法(如 AES、DES、SM4)。对称加密速度较快,适合加密大批量数据。因为双方使用的是相同的密钥,密钥的安全管理至关重要。

  • 非对称密钥 :非对称加密使用一对密钥------公钥私钥。公钥用于加密数据,而私钥用于解密数据。由于每个人都有一对唯一的公私钥,非对称加密更适合在需要身份验证的通信中使用,比如在 HTTPS、电子邮件等安全协议中。

2. 公钥(Public Key)和私钥(Private Key)

公钥和私钥是非对称加密算法中的一对密钥,每个密钥的用途不同:

  • 公钥 :可以公开分享给任何人,用于加密数据验证签名。任何人都可以使用它来加密信息,但只能由拥有对应私钥的人解密。

  • 私钥 :必须保持机密,用于解密数据生成签名。它在解密加密的数据或证明身份方面起着关键作用。私钥丢失或泄露会导致安全问题,因此通常需要妥善保护。

3. 证书(Certificate)

证书是加密和身份认证的凭证,用来验证公钥的真实性。它通过数字签名和公钥结合来确认某个主体的身份。

  • 组成部分:证书通常包含主体的名称、公钥、签发者的名称、有效期等。

  • 数字证书的用途:在 SSL/TLS、HTTPS 等场景中,证书保证了用户连接的网站的身份。证书由可信的第三方(证书颁发机构 CA)签发。CA 在生成证书前会验证申请方的身份,并用 CA 的私钥对证书进行签名,确保证书的真实性。

  • 工作流程:在 HTTPS 连接中,服务器向客户端提供证书,客户端使用证书中的公钥加密会话密钥,并将其传送给服务器,以此确保数据的安全传输。

4. 初始向量(IV)

初始向量(IV)是一个用于加密过程的随机值或固定值,常见于对称加密中的分组加密模式,比如 CBC(Cipher Block Chaining)模式。

  • 作用:IV 用于增加加密的不可预测性,避免相同的明文在不同加密过程中生成相同的密文。这通过为每个明文块增加一个随机元素,确保即使相同的明文在相同的密钥下加密多次,生成的密文也会不同。

  • 使用方法:在 CBC 模式中,IV 会和第一个明文块进行异或运算,生成第一个密文块。后续的明文块会依次与前一个密文块进行运算,形成依赖关系。

  • 安全性:IV 不需要保密,但需要在加密和解密时保持一致。IV 通常会和密文一起传递给接收方,以便于解密时恢复明文。

总结

  • 密钥:数据加密和解密的核心机密值。
  • 公钥和私钥:用于非对称加密的成对密钥,公钥公开,私钥保密。
  • 证书:用于验证公钥的真实性和主体身份的凭证,由 CA 签发。
  • 初始向量(IV):分组加密算法中的随机值,用于增加加密结果的随机性,确保相同明文不会生成相同密文。
相关推荐
fangeqin2 天前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
API开发13 天前
苹果芯片macOS安装版Homebrew(亲测) ,一键安装node、python、vscode等,比绿色软件还干净、无污染
vscode·python·docker·nodejs·openssl·brew·homebrew
KWMax14 天前
RSA加密原理及推导
加密·rsa
亚林瓜子15 天前
设置AWS EC2默认使用加密磁盘
云计算·磁盘·aws·加密
码农不惑16 天前
Rust使用tokio(二)HTTPS相关
https·rust·web·openssl
GettingReal17 天前
Python 构建壳来启动加密的 SpringBoot Jar 包,增加反编译难度
spring boot·python·jar·加密
liulilittle22 天前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法并通过OPENSSL加密验证算法正确性。
linux·服务器·c++·算法·安全·加密·openssl
liulilittle24 天前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
liulilittle24 天前
通过高级处理器硬件指令集AES-NI实现AES-256-CFB算法。
linux·服务器·c++·算法·安全·加密·openssl
花花少年25 天前
Ubuntu系统下交叉编译openssl
openssl·交叉编译