信息安全_2


前言

本篇讲述古典密码、对称密码、哈希函数等内容。


一、密码学

1、密码学定义

  • 密码学(Cryptology):研究密码系统或通信安全的一门科学。
    • 密码编码学(Cryptography):寻求保证消息保密性或认证性的方法。
    • 密码分析学(Cryptanalytics):研究加密消息的破译或消息的伪造。

2、密码体制

定义: 一个密码体制是满足以下条件的五元组 ( 𝒫 , 𝒞 , 𝒦 , E , 𝒟 ) (𝒫,𝒞,𝒦,ℰ,𝒟) (P,C,K,E,D)

  • 𝒫 𝒫 P表示所有可能的明文组成的有限集;
  • 𝒞 𝒞 C表示所有可能的密文组成的有限集;
  • 𝒦 𝒦 K表示密钥空间,是由所有可能的密钥组成的有限集;
  • 对任意的 K ∈ 𝒦 K\in 𝒦 KK,都存在一个加密法则 e K ∈ E e_K\in ℰ eKE和相应的解密法则 d K ∈ 𝒟 d_K\in 𝒟 dKD。并且对每个 e K : 𝒫 → 𝒞 e_K:𝒫\rightarrow𝒞 eK:PC d K : 𝒞 → 𝒫 d_K:𝒞\rightarrow 𝒫 dK:CP,对任意的明文 x ∈ 𝒫 x\in 𝒫 xP,均有 d K ( e K ( x ) ) = x d_K(e_K(x))=x dK(eK(x))=x

3、通信信道

在这里插入图片描述


4、算法设计的公开原则

柯克霍夫原则(Kerckhoffs’ Principle):密码系统安全是基于密钥的而不是算法的保密。


5、密码分析

  • 密码分析: 如果能够对密文的分析确定明文或密钥,或者能够根据明文-密文对确定密钥,这个破译过程称为密码分析。

  • 数学分析: 密码分析者针对加解密算法的数学基础和某些密码学特性,通过数学求解的方法来破译密码。

  • 物理分析: 针对加密电子设备在运行过程中的时间消耗、功率消耗或电磁辐射之类的侧信道信息泄露而对加密设备进行攻击的方法被称为侧信道攻击

  • 穷举攻击在这里插入图片描述

  • 密码分析学在这里插入图片描述


5.1、数学类分析方法

  • 差分分析及其扩展
  • 线性分析及其扩展
  • 代数分析
  • 相关密钥分析方法
  • 其他分析方法
    • 积分分析
    • 中间相遇分析
    • Biclique分析

5.1.1、差分分析
  • 差分分析是选择明文攻击
    • 选择明文攻击:密码分析者可得到所需要的任何明文所对应的密文,这些密文与待解的密文是同一个密钥加密得来的。
  • 差分的定义(一般情况)
    • 对分组长度为n的r轮迭代密码,将两个n比特串 X i X_i Xi X i ∗ X_i^* Xi的差分定义为: Δ X = X i ⨁ X i ∗ \varDelta X=X_i\bigoplus X_i^* ΔX=XiXi
  • 扩展方法:高阶差分分析,截断差分分析,不可能差分分析,飞来飞去攻击,矩阵攻击。
  • 基本思想:通过分析明文对的差分值密文对的差分值的影响来恢复某些密钥比特。
  • 差分分析一开始是被用来分析DES的安全性,后来被推广到分析所有密码算法的安全性。
  • 差分分析是一个非常基本的分析方法,所有的算法在设计之初,设计者就需要考虑它抵抗差分分析的能力。
  • 攻击的过程
    • 选择大量的4重组 ( x , x ∗ , y , y ∗ ) (x,x^*,y,y^*) (x,x,y,y),其中 Δ x = x ⨁ x ∗ \varDelta x=x\bigoplus x^* Δx=xx Δ y = y ⨁ y ∗ \varDelta y=y\bigoplus y^* Δy=yy的值是固定的。
    • 对每个4重组,猜测最后一轮的密钥并进行解密,对每一个候选密钥,计算倒数第二轮的输出差分值;
    • 若倒数第二轮的输出差分是 Δ y \varDelta y Δy,此时该猜测密钥的计数器加1;
    • 通过计数器的个数多的可能为正确的密钥,因为我们选择一条高概率的差分链。
      在这里插入图片描述

5.1.2、线性分析
  • 扩展方法:多重线性分析,非线性分析,差分-线性分析
  • 基本思想:利用密码算法中明文、密文和密钥的不平衡线性逼近来恢复某些密钥比特。
  • 线性分析是一种已知明文攻击
    • 已知明文攻击:除待解的密文外,密码分析者有一些明文和用同一个密钥加密这些明文所对应的密文。

5.1.3、代数分析

在这里插入图片描述


5.2、旁路攻击方法

  • 定义: 由于密码算法总是在软件、硬件或物理设备等环境中实现,在运行中总要泄露出各种与密码算法相关的信息,如能量消耗、电磁辐射信息、运行时间等,这些信息被称为侧信道信息。攻击者利用这些信息攻击密码系统,即为侧信道攻击
  • 旁路攻击方式: 在这里插入图片描述

二、古典密码

1、移位密码

  • 移位密码(Shift Cipher)定义:令 𝒫 = 𝒞 = 𝒦 = Z 26 𝒫=𝒞=𝒦=\Z_{26} P=C=K=Z26。对 0 ⩽ K ⩽ 25 0\leqslant K\leqslant 25 0K25,任意 x , y ∈ Z 26 x,y\in\Z_{26} x,yZ26,定义加密变换和解密变换分别为 e K ( x ) = ( x + K ) m o d 26 e_K(x)=(x+K)mod26 eK(x)=(x+K)mod26 d K ( y ) = ( y − K ) m o d 26 d_K(y)=(y-K)mod26 dK(y)=(yK)mod26
  • 例:
    • 密文:L ORYH BRX
    • 明文:I LOVE YOU
    • 密钥:3

2、代换密码

  • 代换密码定义:
    • 𝒫 = 𝒞 = Z 26 𝒫=𝒞=\Z_{26} P=C=Z26 𝒦 𝒦 K由26个数字0,1,···,25的所有可能置换组成。对任意的置换 π ∈ 𝒦 \pi\in 𝒦 πK,定义加密变换和解密变换分别为 e π ( x ) = π ( x ) e_{\pi}(x)=\pi(x) eπ(x)=π(x) d π ( y ) = π − 1 ( y ) d_{\pi}(y)={\pi}^{-1}(y) dπ(y)=π1(y)
  • 例:在这里插入图片描述

3、仿射密码

  • 仿射密码定义:
    • 𝒫 = 𝒞 = Z 26 𝒫=𝒞=\Z_{26} P=C=Z26,且 𝒦 = { ( a , b ) ∈ Z 26 × Z 26 ∣ g c d ( a , 26 ) = 1 } 𝒦=\{(a,b)\in\Z_{26}\times\Z_{26}|gcd(a,26)=1\} K={(a,b)Z26×Z26gcd(a,26)=1}gcd()函数为求最大公约数。对任意的 K = ( a , b ) ∈ 𝒦 K=(a,b)\in 𝒦 K=(a,b)K x , y ∈ Z 26 x,y\in\Z_{26} x,yZ26,定义加密变换和解密变换分别为 e K ( x ) = ( a x + b ) m o d 26 e_{K}(x)=(ax+b)mod26 eK(x)=(ax+b)mod26 d K ( y ) = a − 1 ( y − b ) m o d 26 d_{K}(y)={a}^{-1}(y-b)mod26 dK(y)=a1(yb)mod26
  • 例:密钥 K = ( 7 , 3 ) K=(7,3) K=(7,3),加密变换 e K ( x ) = 7 x + 3 e_{K}(x)=7x+3 eK(x)=7x+3;由于 7 − 1 m o d 26 = 15 7^{-1}mod26=15 71mod26=15,所以解密变换 d K ( y ) = 15 ( y − 3 ) m o d 26 = 15 y − 19 d_{K}(y)=15(y-3)mod26=15y-19 dK(y)=15(y3)mod26=15y19PS:这里的-1是取逆元而不是倒数

4、传统密码

4.1、维吉尼亚密码

设m是一个正整数。定义 𝒫 = 𝒞 = 𝒦 = ( Z 26 ) m 𝒫=𝒞=𝒦=(\Z_{26})^m P=C=K=(Z26)m。对任意的密钥 K = ( k 1 , k 2 , ⋯   , k m ) K=(k_1,k_2,\cdots,k_m) K=(k1,k2,,km),定义加密和解密算法分别为: e K ( x 1 , x 2 , ⋯   , x m ) = ( x 1 + k 1 , x 2 + k 2 , ⋯   , x m + k m ) e_K(x_1,x_2,\cdots,x_m)=(x_1+k_1,x_2+k_2,\cdots,x_m+k_m) eK(x1,x2,,xm)=(x1+k1,x2+k2,,xm+km) d K ( y 1 , y 2 , ⋯   , y m ) = ( y 1 − k 1 , y 2 − k 2 , ⋯   , y m − k m ) d_K(y_1,y_2,\cdots,y_m)=(y_1-k_1,y_2-k_2,\cdots,y_m-k_m) dK(y1,y2,,ym)=(y1k1,y2k2,,ymkm),以上所有的运算均在 Z 26 \Z_{26} Z26上进行。

在这里插入图片描述


4.2、希尔密码

m ⩾ 2 m\geqslant 2 m2为正整数, 𝒫 = 𝒞 = ( Z 26 ) m 𝒫=𝒞=(\Z_{26})^m P=C=(Z26)m,且 𝒦 = { 定义在 ( Z 26 ) 上的 m × m 可逆矩阵 } 𝒦=\{定义在(\Z_{26})上的m\times m可逆矩阵\} K={定义在(Z26)上的m×m可逆矩阵}。对任意的密钥K,定义加密变换和解密变换分别为 e K ( x ) = x K e_K(x)=xK eK(x)=xK d K ( y ) = y K − 1 d_K(y)=yK^{-1} dK(y)=yK1以上所有的运算均在 Z 26 \Z_{26} Z26上进行。


4.3、置换密码

设m是一个正整数。定义 𝒫 = 𝒞 = ( Z 26 ) m 𝒫=𝒞=(\Z_{26})^m P=C=(Z26)m 𝒦 𝒦 K由所有定义在集合 { 1 , 2 , ⋯   , m } \{1,2,\cdots,m\} {1,2,,m}上的置换组成。对任意的密钥(置换) π \pi π,定义加密算法和解密算法分别为: e K ( x 1 , x 2 , ⋯   , x m ) = ( x π ( 1 ) , ⋯   , x π ( m ) ) e_K(x_1,x_2,\cdots,x_m)=(x_{\pi(1)},\cdots,x_{\pi(m)}) eK(x1,x2,,xm)=(xπ(1),,xπ(m)) d K ( y 1 , ⋯   , y m ) = ( y π − 1 ( 1 ) , ⋯   , y π − 1 ( m ) ) d_K(y_1,\cdots,y_m)=(y_{\pi^{-1}(1)},\cdots,y_{\pi^{-1}(m)}) dK(y1,,ym)=(yπ1(1),,yπ1(m)),上式中 π − 1 \pi^{-1} π1为置换 π \pi π的逆置换。


5、一次一密

假设 n ⩾ 1 n\geqslant 1 n1是正整数, 𝒫 = 𝒞 = 𝒦 = ( Z 2 ) n 𝒫=𝒞=𝒦=(\Z_{2})^n P=C=K=(Z2)n。对于 K ∈ ( Z 2 ) n K\in(\Z_{2})^n K(Z2)n,定义 e K ( x ) e_K(x) eK(x)为K和x的模2的向量和(或者说是两个相关比特串的异或)。因此,如果 x = ( x 1 , ⋯   , x n ) x=(x_1,\cdots,x_n) x=(x1,,xn)并且 K = ( K 1 , ⋯   , K n ) K=(K_1,\cdots,K_n) K=(K1,,Kn),则 e K ( x ) = ( x 1 + K 1 , ⋯   , x n + K n ) m o d    2 e_K(x)=(x_1+K_1,\cdots,x_n+K_n)\mod 2 eK(x)=(x1+K1,,xn+Kn)mod2,解密和加密是一样的。如果 y = ( y 1 , ⋯   , y n ) y=(y_1,\cdots,y_n) y=(y1,,yn),则 d K ( y ) = ( y 1 + K 1 , ⋯   , y n + K n ) m o d    2 d_K(y)=(y_1+K_1,\cdots,y_n+K_n)\mod 2 dK(y)=(y1+K1,,yn+Kn)mod2

PS:1、密钥的长度要和明文消息的长度一致
2、每次加密所使用的密钥都需要随机选取


6、密码系统

在这里插入图片描述


三、对称密码

  • 对称密码定义: 加解密使用相同密钥的密码体制。
  • 对称密码:
    • 分组密码: 是一种加解密方案,它将输入的明文分组当做一个整体处理,输出一个等长的密文分组;
    • DES,AES,Blowfish,Twofish,Skipjack,和RC2
    • 轻量级分组密码:LBlock,Present,SIMON,SPECK,LED等。
    • 流密码: 从明文输入流逐位或逐字节产生密文输出。RC4,ZUC,A5等。

在这里插入图片描述


1、分组密码

  • 分组密码定义: 将明文分组消息编码表示后的数字(通常是0或1)序列 x 1 , x 2 , ⋯ x_1,x_2,\cdots x1,x2,划分成长为m的组 x = ( x 1 , x 2 , ⋯   , x m ) x=(x_1,x_2,\cdots,x_m) x=(x1,x2,,xm),各组(长为m的向量)分别在密钥 k = ( k 1 , k 2 , ⋯   , k t ) k=(k_1,k_2,\cdots,k_t) k=(k1,k2,,kt)的控制下变换成等长的输出数学序列 y = ( y 1 , y 2 , ⋯   , y n ) y=(y_1,y_2,\cdots,y_n) y=(y1,y2,,yn)(长度为n的向量)。
  • 数学模型: 在这里插入图片描述
  • 分组密码形式化定义:
    • 分组密码是一种满足下列条件的映射 E : S K × F 2 m E:S_K\times F_2^m E:SK×F2m:对每个 k ∈ S K k\in S_K kSK E ( k ) E(k) E(k)是从 F 2 m F_2^m F2m F 2 m F_2^m F2m的一个置换。
  • 分类:
    • n > m n>m n>m,称为有数据扩展的分组密码
    • n < m n<m n<m,称为有数据压缩的分组密码
    • n = m n=m n=m,称为无数据扩展或压缩的分组密码(通常均为此类)
  • 优点:
    • 分组密码容易被标准化
    • 分组密码同意实现同步
  • 缺点:
    • 分组密码不能隐蔽数据模式
    • 分组加密不能抵抗重放、嵌入和删除等攻击

1.1、分组密码设计理论

  • 针对安全性的设计原理
    • 混淆原则: 人们所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖性对密码分析者来说无法利用;
    • 扩散原则: 人们所设计的密码应使得密钥的每一位影响密文的许多位,以防止对密钥进行逐段破译;而且明文的每一位也应该影响密文的许多位,以便隐蔽明文的统计特性。
  • 针对实现的设计原理
    • 软件实现的设计方案: 使用子块和简单运算
    • 硬件实现的设计方案: 加密和解密的相似性,以便同样的器件可以用来加解密。

1.2、分组密码的结构

Feistel结构

  • 一轮加密过程
    • L 1 = R 0 L_1=R_0 L1=R0
    • R 1 = L 0 ⊕ F ( R 0 , K 0 ) R_1=L_0\oplus F(R_0,K_0) R1=L0F(R0,K0)
  • 加解密相似
    在这里插入图片描述

1.3、分组密码的整体结构

SP结构

  • S:Substitution(替换),混淆层
  • P:Permutation(置换),扩散层
  • 和Feistel结构相比,SP结构可以得到更快的扩散,更适宜硬件实现
    在这里插入图片描述

1.4、分组密码的工作模式

  • ECB(Electronic Codebook,电码本模式)
  • 优点:
    • 可并行运算
    • 速度快
    • 易于标准化
  • 缺点:
    • 分组密码不能隐蔽数据格式
    • 不能抵抗重放、嵌入、删除
    • 加密长度只能是分组的倍数
      在这里插入图片描述
  • CBC(Cipher Block Chaining,密码链接模式)
  • 优点:输出具有一定的随机性,在一定程度上防止数据篡改。
  • 缺点:
    • 会出现错误传播
    • 加密的消息只能说分组长度的倍数
      在这里插入图片描述
  • CTR(Counter Moder,计数器模式)
    在这里插入图片描述

2、DES算法

2.1、算法背景

在这里插入图片描述


2.2、整体结构

在这里插入图片描述

  • 明文长度、密钥长度、密文长度:64bit,56bit,64bit;
  • 轮数:16轮
  • 加密算法:
    • x 0 = I P ( x ) = L 0 R 0 x_0=IP(x)=L_0R_0 x0=IP(x)=L0R0,其中x是明文, L 0 L_0 L0 x 0 x_0 x0左32比特, R 0 R_0 R0 x 0 x_0 x0右32比特;
    • L i = R i − 1 : R i = L i − 1 ⊕ f ( R i − 1 , K i ) L_i=R_{i-1}:R_i=L_{i-1}\oplus f(R_{i-1},K_i) Li=Ri1:Ri=Li1f(Ri1,Ki),其中f是轮函数, K i K_i Ki是长度为48比特的第i轮密钥;
    • 密文 y = I P − 1 ( R 16 L 16 ) y=IP^{-1}(R_{16}L_{16}) y=IP1(R16L16)
      在这里插入图片描述

2.3、DES算法的轮函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.4、DES算法密钥扩展算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


2.5、DES的安全性分析

  • 穷尽密钥搜索攻击:
    • DES的密钥个数: 2 56 ≈ 1 0 17 2^{56}\approx 10^{17} 2561017
    • 1997年1月28日,美国RSA数据安全公司悬赏10000美元破译密钥长度为56比特的DES;
    • 从1997年3月13日起,美国科罗拉多州的程序员Verser用了96天成功破译了DES算法;
    • 1998年7月,电子边境基金会(EFF)使用了25万美元的计算机在56小时内破解了56比特DES;
    • 1999年1月,电子边境基金会(EFF)宣布花了22.5小时破解了DES;
  • DES显示了很强的雪崩效应(即明文或密钥的微小改变将对密文产生很大的影响)。
  • DES的弱点:
    • 弱密钥:DES中存在着少量弱密钥,即一个主密钥可以产生的所有子密钥都是一样的。
    • 密文与明文、密文与密钥的相关性:每个密文位都是所有明文位和所有密钥位的复合函数,达到这一要求所需的迭代次数最少为5,迭代8次以后输出的输入就可认为是不相关的了。

2.6、多重DES

2.6.1、二重DES
  • 二重DES: 给定明文P和两个加密密钥 k 1 k_1 k1 k 2 k_2 k2,采用DES对P进行加密E,有 C = E k 2 ( E k 1 ( P ) ) C=E_{k_2}(E_{k_1}(P)) C=Ek2(Ek1(P))。加密过程如下:在这里插入图片描述
  • 利用中间相遇攻击,只需要 2 57 2^{57} 257次迭代就可以恢复出密钥。

2.6.2、三重DES
  • 1、使用两个密钥的三重DES C = E k 1 ( D k 2 ( E k 1 ( P ) ) ) C=E_{k_1}(D_{k_2}(E_{k_1}(P))) C=Ek1(Dk2(Ek1(P)))密钥长度112bit。在这里插入图片描述
  • 2、使用三个密钥的三重DES C = E k 3 ( D k 2 ( E k 1 ( P ) ) ) C=E_{k_3}(D_{k_2}(E_{k_1}(P))) C=Ek3(Dk2(Ek1(P)))密钥长度168bit。

3、AES算法

3.1、AES简介

  • 明文长度和密文长度: 128bit
  • 密钥长度: 128bit/192bit/256bit
  • 轮数 N r N_r Nr 10轮/12轮/14轮
  • 加密过程:
    • 128bit明文P看成是16个 G F ( 2 8 ) GF(2^8) GF(28)上的元素;
    • X 0 = P ⊕ K 0 X_0=P\oplus K_0 X0=PK0
    • F o r ( i = 1 ) t o ( N r − 1 ) For(i=1)to(N_r-1) For(i=1)to(Nr1)
      • X i = A K ∘ M C ∘ S R ∘ S B ( X i − 1 ) X_i=AK∘MC∘SR∘SB(X_{i-1}) Xi=AKMCSRSB(Xi1)
    • 密文 C = A K ∘ S R ∘ S B ( X N r − 1 ) C=AK∘SR∘SB(X_{N_r-1}) C=AKSRSB(XNr1)
      在这里插入图片描述

3.2、AES S盒-SB

在这里插入图片描述
解释一下, 4 × 4 4\times 4 4×4的矩阵,每一个元素8bit,左4bit为x(十进制),右4bit为y(十进制),然后查表就行了。


3.3、AES行移位变换-SR

在这里插入图片描述
第一行左移0个元素,第二行左移1个元素,以此类推。


3.4、AES列变换-MC

在这里插入图片描述


3.5、密钥扩展算法

在这里插入图片描述


3.6、AES-128安全性分析

在这里插入图片描述


4、Camellia算法

4.1、加密过程

在这里插入图片描述
在这里插入图片描述


4.2、安全性分析

在这里插入图片描述

最新结果:
在这里插入图片描述


5、其他分组密码算法

  • SMS4
  • ARIA
  • CLEAFIA
  • IDEA
  • Serpent

6、流密码

  • 一个流密码将消息分成连续的符号 x = x 1 x 2 ⋯ x=x_1x_2\cdots x=x1x2,用密钥流 k = k 1 k 2 ⋯ k=k_1k_2\cdots k=k1k2的第i个元素 k i k_i ki x i x_i xi加密,即 E k ( x ) = E k 1 ( x 1 ) E k 2 ( x 2 ) ⋯ E_k(x)=E_{k_1}(x_1)E_{k_2}(x_2)\cdots Ek(x)=Ek1(x1)Ek2(x2)
  • 如果密钥流经过d个符号后重复,则称该密钥流是周期性的,否则就是非周期的
    在这里插入图片描述

6.1、同步流密码

在这里插入图片描述


6.2、异步流密码

定义: 密钥流的产生不但与密钥K有关,而且还与明文元素或密文元素有关。


6.3、RC4

在这里插入图片描述
在这里插入图片描述


四、哈希函数

在这里插入图片描述

  • 哈希函数性质:
    • 哈希函数能够适合于各种消息和文件,用途广泛;
    • 给定M,计算 H ( M ) H(M) H(M)相对容易;
    • 给定 H ( M ) H(M) H(M),计算出M是相对容易的;
    • 给定M1,寻找M2,使 H ( M 1 ) = H ( M 2 ) H(M1)=H(M2) H(M1)=H(M2)在计算上不可行;
    • 寻找任何的 ( M 1 , M 2 ) (M1,M2) (M1,M2),使 H ( M 1 ) = H ( M 2 ) H(M1)=H(M2) H(M1)=H(M2)在计算上不可行。
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

1、SHA

在这里插入图片描述


2、MD

在这里插入图片描述


结束!

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AES(Advanced Encryption Standard)是一种对称加密算法,使用相同的密钥进行加密和解密。128位密钥的AES算法是其最常用的变体之一。 以下是一个使用C语言实现128位密钥AES加解密的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include <string.h> #include <openssl/aes.h> void aes_encrypt(const uint8_t* key, const uint8_t* plaintext, uint8_t* ciphertext) { AES_KEY aes_key; AES_set_encrypt_key(key, 128, &aes_key); AES_encrypt(plaintext, ciphertext, &aes_key); } void aes_decrypt(const uint8_t* key, const uint8_t* ciphertext, uint8_t* plaintext) { AES_KEY aes_key; AES_set_decrypt_key(key, 128, &aes_key); AES_decrypt(ciphertext, plaintext, &aes_key); } int main() { const uint8_t key[] = "0123456789abcdef"; // 128位密钥 const uint8_t plaintext[] = "Hello, AES!"; int plaintext_len = strlen((char*)plaintext); uint8_t ciphertext[plaintext_len]; uint8_t decryptedtext[plaintext_len]; aes_encrypt(key, plaintext, ciphertext); aes_decrypt(key, ciphertext, decryptedtext); printf("Plaintext: %s\n", plaintext); printf("Ciphertext (hex): "); for(int i = 0; i < plaintext_len; ++i) { printf("%02x ", ciphertext[i]); } printf("\n"); printf("Decrypted text: %s\n", decryptedtext); return 0; } ``` 以上代码使用OpenSSL库中的AES函数实现了对128位密钥的AES加解密操作。首先定义了`aes_encrypt`和`aes_decrypt`两个函数来执行加密和解密,然后在`main`函数中定义了要加密的明文和密钥。通过调用`aes_encrypt`函数进行加密,然后再调用`aes_decrypt`函数进行解密,并打印结果。 请注意,这是一个简单的示例代码,实际使用中需要进行适当的错误处理、填充操作等。另外,确保在使用密钥时,采取适当的方式来生成和保存密钥,以保证安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禁筱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值