如何设计安全可靠的开放接口【番外篇】--- 对称加密算法

本文介绍了对称加密算法的基本原理和特点,包括DES、3DES和AES的详细内容。DES由于密钥长度有限,已被3DES和AES取代。3DES增强了安全性但降低了效率,而AES则成为目前广泛采用的标准。同时,讨论了ECB和CBC两种加密模式,ECB模式效率高但安全性较低,而CBC模式通过引入初始化向量提高了安全性。
摘要由CSDN通过智能技术生成

【如何设计安全可靠的开放接口】系列

1. 如何设计安全可靠的开放接口—之Token
2. 如何设计安全可靠的开放接口—之AppId、AppSecret
3. 如何设计安全可靠的开放接口—之签名(sign)
4. 如何设计安全可靠的开放接口【番外篇】—关于MD5应用的介绍
5. 如何设计安全可靠的开放接口—还有哪些安全保护措施
6. 如何设计安全可靠的开放接口—对请求参加密保护
7. 如何设计安全可靠的开放接口【番外篇】— 对称加密算法

前言

对称加密算法是指通过密钥对原始数据(明文),进行特殊的处理后,使其变成密文发送出去,数据接收方收到数据后,再使用同样的密钥进行特殊处理后,再使其还原为原始数据(明文),对称加密算法中密钥只有一个,数据加密与解密方都必须事先约定好。

对称加密算法特点

  1. 只有一个密钥,加密和解密都使用它。
  2. 加密、解密速度快、效率高。
  3. 由于数据加密方和数据解密方使用的是同一个密钥,因此密钥更容易被泄露。

常用的加密算法

DES

基本原理

其入口参数有三个:key、data、mode。key为加密解密使用的密钥,data为加密解密的数据,mode为其工作模式。当模式为加密模式时,明文按照64位进行分组,形成明文组,key用于对数据加密,当模式为解密模式时,key用于对数据解密。实际运用中,密钥只用到了64位中的56位,这样才具有高的安全性。
在这里插入图片描述

算法特点

DES算法具有极高安全性,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法。而56位长的密钥的穷举空间为2^56,这意味着如果一台计算机的速度是每一秒钟检测一百万个密钥,则它搜索完全部密钥就需要将近2285年的时间,可见,这是难以实现的。然而,这并不等于说DES是不可破解的。而实际上,随着硬件技术和Internet的发展,其破解的可能性越来越大,而且,所需要的时间越来越少。使用经过特殊设计的硬件并行处理要几个小时。

为了克服DES密钥空间小的缺陷,人们又提出了3DES的变形方式。

3DES

3DES相当于对每个数据块进行三次DES加密算法,虽然解决了DES不够安全的问题,但效率上也相对慢了许多。

AES

AES用来替代原先的DES算法,是当前对称加密中最流行的算法之一。

ECB模式

AES加密算法中一个重要的机制就是分组加密,而ECB模式就是最简单的一种分组加密模式,比如按照每128位数据块大小将数据分成若干块,之后再对每一块数据使用相同的密钥进行加密,最终生成若干块加密后的数据,这种算法由于每个数据块可以进行独立的加密、解密,因此可以进行并行计算,效率很高,但也因如此,则会很容易被猜测到密文的规律。

在这里插入图片描述


private static final String AES_ALG = "AES";
private static final String AES_ECB_PCK_ALG = "AES/ECB/NoPadding";

public static void main(String[] args) throws Exception {
    System.out.println("第一次加密:" + encryptWithECB("1234567812345678", "50AHsYx7H3OHVMdF123456", "UTF-8"));
	System.out.println("第二次加密:" + encryptWithECB("12345678123456781234567812345678", "50AHsYx7H3OHVMdF123456", "UTF-8"));
}

public static String encryptWithECB(String content, String aesKey, String charset) throws Exception {
    Cipher cipher = Cipher.getInstance(AES_ECB_PCK_ALG);
    cipher.init(Cipher.ENCRYPT_MODE,
            new SecretKeySpec(Base64.decodeBase64(aesKey.getBytes()), AES_ALG));
    byte[] encryptBytes = cipher.doFinal(content.getBytes(charset));
    return Hex.encodeHexString(encryptBytes);
}
第一次加密:87d2d15dbcb5747ed16cfe4c029e137c
第二次加密:87d2d15dbcb5747ed16cfe4c029e137c87d2d15dbcb5747ed16cfe4c029e137c

可以看出,加密后的密文明显也是重复的,因此针对这一特性可进行分组重放攻击。

CBC模式

CBC模式引入了初始化向量的概念(IV),第一组分组会使用向量值与第一块明文进行异或运算,之后得到的结果既是密文块,也是与第二块明文进行异或的对象,以此类推,最终解决了ECB模式的安全问题。

在这里插入图片描述

CBC模式的特点

CBC模式安全性比ECB模式要高,但由于每一块数据之间有依赖性,所以无法进行并行计算,效率没有ECB模式高。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码拉松

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

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

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

打赏作者

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

抵扣说明:

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

余额充值