关于AES 和 BASE64 的理解

文章介绍了Base64编码原理,包括其字符集和编码后的数据长度计算。同时,详细阐述了AES加密算法,如ECB、CBC、CFB、OFB和CTR模式,以及AES的密钥长度限制,指出Java中超过256位密钥会导致错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BASE64

首先 base64 是一种编码方式,它的字符集由64个不同字符组成(A-Z、a-z、0-9和两个额外字符+/),因此每个Base64字符都占用6个比特(2^6 = 64)

Base64编码后的数据长度 = 4 * ceil(原始数据长度 / 3)

其中,ceil() 是向上取整的函数。请注意,如果原始数据的长度恰好是3的倍数,则不会添加填充字符 “=”,而编码后的数据长度将与原始数据长度成正比,约为4/3倍。

AES

AES(Advanced Encryption Standard)是一种对称加密算法,它是目前广泛使用的加密标准之一。AES加密算法使用相同的密钥(称为对称密钥)进行加密和解密操作,因此必须确保密钥的安全性。AES支持多种加密模式,这些模式决定了如何处理数据块并进行加密。

以下是一些常见的AES加密模式:

ECB(Electronic Codebook)模式:
ECB是最简单的AES加密模式。它将明文分成大小相等的数据块,然后对每个数据块单独进行加密。但是,ECB模式存在一些问题,因为相同的明文块会被加密成相同的密文块,这导致了一些安全性问题,例如可能泄漏信息模式和无法抵抗攻击者的重新排序攻击。

  • CBC(Cipher Block Chaining)模式:
    CBC模式解决了ECB模式的一些问题。在CBC模式中,每个数据块在加密前会与前一个密文块进行异或运算,然后再进行加密。这样做使得每个数据块的加密都依赖于前一个数据块,增加了密码算法的随机性。加密时,需要一个初始向量(IV)来作为第一个数据块的前一个密文块。为了保证安全性,IV应该是随机的且每次加密时都不同。
  • CFB(Cipher Feedback)模式:
    CFB模式将AES作为一个自反馈的流密码来使用,允许单个字节的加密和解密。类似于CBC,它使用初始向量(IV)来启动过程,但之后每个数据块的密文将反馈回加密算法以产生新的密文。
  • OFB(Output Feedback)模式:
  • OFB模式将AES作为一个自反馈的流密码来使用,类似于CFB。OFB模式使用初始向量(IV)来启动过程,然后使用AES算法的输出作为流密码,而不是使用密文反馈。
  • CTR(Counter)模式:
    CTR模式将AES用作计数器模式的流密码。它使用一个初始向量(IV)和一个计数器值,然后将IV和计数器值组合起来,加密后得到密钥流,再将密钥流和明文数据进行异或运算得到密文。

AES 的密钥支持 128、192、256位。

在这里插入图片描述
所以对于密钥要进行 base64 加密的话,最大长度不能超过32 个字符,32 个字符刚好是 256 位,超过就会报错如下

如果尝试在 Java
中使用超过256位的AES密钥,通常会抛出java.security.InvalidKeyException异常。这是因为Java标准库中的AES实现对于密钥长度有一定的限制,不支持超过256位的密钥

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

灵豸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值