python - AES 256 字节以外(8 或 16)

标签 python python-3.x encryption cryptography aes

我正在使用 AES 256 来加密应用程序中的整数。当我将加密文本转换为整数时,它给出的整数太长,例如:

127510614367469717778923839884853125321

即使输入的纯文本是一位整数。

我正在使用以下代码:

from Crypto.Cipher import AES
import binascii
obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')
message = "0000000000000001" 
ct = obj.encrypt(message)
hexa = binascii.hexlify(ct)
i = int(hexa,16)
print(i)

输出密文太长。我希望将密文输出为 3 或 4 位数字,而不是这么长的数字。

有什么替代方案吗?我可以使用 AES 8 或 AES 16 进行加密吗?那么密文中的位数会更少吗?

最佳答案

“AES256”中的“256”指的是 key 大小,您遇到的“问题”在于 block 大小。

AES 是 block cipher block 大小为 128 位(16 字节)。这意味着它期望作为输入,并生成 16 字节数据 block 作为输出。这是算法的特征,并且无论 key 大小变体如何(AES 128/192/256)都是相同的。这是分组密码的固有特征,虽然存在比 AES 更小的分组大小的密码,但这实际上使它们的安全性降低(例如,参见 Sweet32 )。

但是,您可以在某种模式下使用 AES,导致其变为 stream cipher输入大小 = 输出大小,例如CTR (Counter) mode .

关于python - AES 256 字节以外(8 或 16),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43248323/

相关文章:

Python MySQLdb - 我必须关闭游标和连接吗?

线程中的python3 websocket

python - Django:显示列表列表中的值

python - 如何在 Odoo 中从产品模板属性行创建产品变体?

Python pandas - 访问其他列的 lambda 函数

python - Pandas:如何找到列的分箱均值

python - Numba - nopython 模式是否支持元组列表?

javascript - Node.JS 对密码进行哈希处理时出现 Binding.PBKDF2 错误

使用 AES 的 Java 加密文件 - 最佳方法

Python 凯撒密码脚本